OSDN Git Service

PR c++/38064
[pf3gnuchains/gcc-fork.git] / gcc / cp / typeck.c
1 /* Build expressions with type checking for C++ compiler.
2    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5    Hacked by Michael Tiemann (tiemann@cygnus.com)
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23
24 /* This file is part of the C++ front end.
25    It contains routines to build C++ expressions given their operands,
26    including computing the types of the result, C and C++ specific error
27    checks, and some optimization.  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "rtl.h"
35 #include "expr.h"
36 #include "cp-tree.h"
37 #include "tm_p.h"
38 #include "flags.h"
39 #include "output.h"
40 #include "toplev.h"
41 #include "diagnostic.h"
42 #include "intl.h"
43 #include "target.h"
44 #include "convert.h"
45 #include "c-common.h"
46 #include "params.h"
47
48 static tree pfn_from_ptrmemfunc (tree);
49 static tree delta_from_ptrmemfunc (tree);
50 static tree convert_for_assignment (tree, tree, const char *, tree, int,
51                                     tsubst_flags_t, int);
52 static tree cp_pointer_int_sum (enum tree_code, tree, tree);
53 static tree rationalize_conditional_expr (enum tree_code, tree, 
54                                           tsubst_flags_t);
55 static int comp_ptr_ttypes_real (tree, tree, int);
56 static bool comp_except_types (tree, tree, bool);
57 static bool comp_array_types (const_tree, const_tree, bool);
58 static tree pointer_diff (tree, tree, tree);
59 static tree get_delta_difference (tree, tree, bool, bool);
60 static void casts_away_constness_r (tree *, tree *);
61 static bool casts_away_constness (tree, tree);
62 static void maybe_warn_about_returning_address_of_local (tree);
63 static tree lookup_destructor (tree, tree, tree);
64 static void warn_args_num (location_t, tree, bool);
65 static int convert_arguments (tree, VEC(tree,gc) **, tree, int,
66                               tsubst_flags_t);
67
68 /* Do `exp = require_complete_type (exp);' to make sure exp
69    does not have an incomplete type.  (That includes void types.)
70    Returns the error_mark_node if the VALUE does not have
71    complete type when this function returns.  */
72
73 tree
74 require_complete_type (tree value)
75 {
76   tree type;
77
78   if (processing_template_decl || value == error_mark_node)
79     return value;
80
81   if (TREE_CODE (value) == OVERLOAD)
82     type = unknown_type_node;
83   else
84     type = TREE_TYPE (value);
85
86   if (type == error_mark_node)
87     return error_mark_node;
88
89   /* First, detect a valid value with a complete type.  */
90   if (COMPLETE_TYPE_P (type))
91     return value;
92
93   if (complete_type_or_else (type, value))
94     return value;
95   else
96     return error_mark_node;
97 }
98
99 /* Try to complete TYPE, if it is incomplete.  For example, if TYPE is
100    a template instantiation, do the instantiation.  Returns TYPE,
101    whether or not it could be completed, unless something goes
102    horribly wrong, in which case the error_mark_node is returned.  */
103
104 tree
105 complete_type (tree type)
106 {
107   if (type == NULL_TREE)
108     /* Rather than crash, we return something sure to cause an error
109        at some point.  */
110     return error_mark_node;
111
112   if (type == error_mark_node || COMPLETE_TYPE_P (type))
113     ;
114   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
115     {
116       tree t = complete_type (TREE_TYPE (type));
117       unsigned int needs_constructing, has_nontrivial_dtor;
118       if (COMPLETE_TYPE_P (t) && !dependent_type_p (type))
119         layout_type (type);
120       needs_constructing
121         = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
122       has_nontrivial_dtor
123         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
124       for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
125         {
126           TYPE_NEEDS_CONSTRUCTING (t) = needs_constructing;
127           TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = has_nontrivial_dtor;
128         }
129     }
130   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
131     instantiate_class_template (TYPE_MAIN_VARIANT (type));
132
133   return type;
134 }
135
136 /* Like complete_type, but issue an error if the TYPE cannot be completed.
137    VALUE is used for informative diagnostics.
138    Returns NULL_TREE if the type cannot be made complete.  */
139
140 tree
141 complete_type_or_else (tree type, tree value)
142 {
143   type = complete_type (type);
144   if (type == error_mark_node)
145     /* We already issued an error.  */
146     return NULL_TREE;
147   else if (!COMPLETE_TYPE_P (type))
148     {
149       cxx_incomplete_type_diagnostic (value, type, DK_ERROR);
150       return NULL_TREE;
151     }
152   else
153     return type;
154 }
155
156 /* Return truthvalue of whether type of EXP is instantiated.  */
157
158 int
159 type_unknown_p (const_tree exp)
160 {
161   return (TREE_CODE (exp) == TREE_LIST
162           || TREE_TYPE (exp) == unknown_type_node);
163 }
164
165 \f
166 /* Return the common type of two parameter lists.
167    We assume that comptypes has already been done and returned 1;
168    if that isn't so, this may crash.
169
170    As an optimization, free the space we allocate if the parameter
171    lists are already common.  */
172
173 static tree
174 commonparms (tree p1, tree p2)
175 {
176   tree oldargs = p1, newargs, n;
177   int i, len;
178   int any_change = 0;
179
180   len = list_length (p1);
181   newargs = tree_last (p1);
182
183   if (newargs == void_list_node)
184     i = 1;
185   else
186     {
187       i = 0;
188       newargs = 0;
189     }
190
191   for (; i < len; i++)
192     newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
193
194   n = newargs;
195
196   for (i = 0; p1;
197        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
198     {
199       if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
200         {
201           TREE_PURPOSE (n) = TREE_PURPOSE (p1);
202           any_change = 1;
203         }
204       else if (! TREE_PURPOSE (p1))
205         {
206           if (TREE_PURPOSE (p2))
207             {
208               TREE_PURPOSE (n) = TREE_PURPOSE (p2);
209               any_change = 1;
210             }
211         }
212       else
213         {
214           if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
215             any_change = 1;
216           TREE_PURPOSE (n) = TREE_PURPOSE (p2);
217         }
218       if (TREE_VALUE (p1) != TREE_VALUE (p2))
219         {
220           any_change = 1;
221           TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
222         }
223       else
224         TREE_VALUE (n) = TREE_VALUE (p1);
225     }
226   if (! any_change)
227     return oldargs;
228
229   return newargs;
230 }
231
232 /* Given a type, perhaps copied for a typedef,
233    find the "original" version of it.  */
234 static tree
235 original_type (tree t)
236 {
237   int quals = cp_type_quals (t);
238   while (t != error_mark_node
239          && TYPE_NAME (t) != NULL_TREE)
240     {
241       tree x = TYPE_NAME (t);
242       if (TREE_CODE (x) != TYPE_DECL)
243         break;
244       x = DECL_ORIGINAL_TYPE (x);
245       if (x == NULL_TREE)
246         break;
247       t = x;
248     }
249   return cp_build_qualified_type (t, quals);
250 }
251
252 /* Return the common type for two arithmetic types T1 and T2 under the
253    usual arithmetic conversions.  The default conversions have already
254    been applied, and enumerated types converted to their compatible
255    integer types.  */
256
257 static tree
258 cp_common_type (tree t1, tree t2)
259 {
260   enum tree_code code1 = TREE_CODE (t1);
261   enum tree_code code2 = TREE_CODE (t2);
262   tree attributes;
263
264   /* In what follows, we slightly generalize the rules given in [expr] so
265      as to deal with `long long' and `complex'.  First, merge the
266      attributes.  */
267   attributes = (*targetm.merge_type_attributes) (t1, t2);
268
269   if (SCOPED_ENUM_P (t1) || SCOPED_ENUM_P (t2))
270     {
271       if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
272         return build_type_attribute_variant (t1, attributes);
273       else
274         return NULL_TREE;
275     }
276
277   /* FIXME: Attributes.  */
278   gcc_assert (ARITHMETIC_TYPE_P (t1)
279               || TREE_CODE (t1) == VECTOR_TYPE
280               || UNSCOPED_ENUM_P (t1));
281   gcc_assert (ARITHMETIC_TYPE_P (t2)
282               || TREE_CODE (t2) == VECTOR_TYPE
283               || UNSCOPED_ENUM_P (t2));
284
285   /* If one type is complex, form the common type of the non-complex
286      components, then make that complex.  Use T1 or T2 if it is the
287      required type.  */
288   if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
289     {
290       tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
291       tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
292       tree subtype
293         = type_after_usual_arithmetic_conversions (subtype1, subtype2);
294
295       if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
296         return build_type_attribute_variant (t1, attributes);
297       else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
298         return build_type_attribute_variant (t2, attributes);
299       else
300         return build_type_attribute_variant (build_complex_type (subtype),
301                                              attributes);
302     }
303
304   if (code1 == VECTOR_TYPE)
305     {
306       /* When we get here we should have two vectors of the same size.
307          Just prefer the unsigned one if present.  */
308       if (TYPE_UNSIGNED (t1))
309         return build_type_attribute_variant (t1, attributes);
310       else
311         return build_type_attribute_variant (t2, attributes);
312     }
313
314   /* If only one is real, use it as the result.  */
315   if (code1 == REAL_TYPE && code2 != REAL_TYPE)
316     return build_type_attribute_variant (t1, attributes);
317   if (code2 == REAL_TYPE && code1 != REAL_TYPE)
318     return build_type_attribute_variant (t2, attributes);
319
320   /* Both real or both integers; use the one with greater precision.  */
321   if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
322     return build_type_attribute_variant (t1, attributes);
323   else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
324     return build_type_attribute_variant (t2, attributes);
325
326   /* The types are the same; no need to do anything fancy.  */
327   if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
328     return build_type_attribute_variant (t1, attributes);
329
330   if (code1 != REAL_TYPE)
331     {
332       /* If one is unsigned long long, then convert the other to unsigned
333          long long.  */
334       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
335           || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
336         return build_type_attribute_variant (long_long_unsigned_type_node,
337                                              attributes);
338       /* If one is a long long, and the other is an unsigned long, and
339          long long can represent all the values of an unsigned long, then
340          convert to a long long.  Otherwise, convert to an unsigned long
341          long.  Otherwise, if either operand is long long, convert the
342          other to long long.
343
344          Since we're here, we know the TYPE_PRECISION is the same;
345          therefore converting to long long cannot represent all the values
346          of an unsigned long, so we choose unsigned long long in that
347          case.  */
348       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
349           || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
350         {
351           tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
352                     ? long_long_unsigned_type_node
353                     : long_long_integer_type_node);
354           return build_type_attribute_variant (t, attributes);
355         }
356
357       /* Go through the same procedure, but for longs.  */
358       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
359           || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
360         return build_type_attribute_variant (long_unsigned_type_node,
361                                              attributes);
362       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
363           || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
364         {
365           tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
366                     ? long_unsigned_type_node : long_integer_type_node);
367           return build_type_attribute_variant (t, attributes);
368         }
369       /* Otherwise prefer the unsigned one.  */
370       if (TYPE_UNSIGNED (t1))
371         return build_type_attribute_variant (t1, attributes);
372       else
373         return build_type_attribute_variant (t2, attributes);
374     }
375   else
376     {
377       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
378           || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
379         return build_type_attribute_variant (long_double_type_node,
380                                              attributes);
381       if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
382           || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
383         return build_type_attribute_variant (double_type_node,
384                                              attributes);
385       if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
386           || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
387         return build_type_attribute_variant (float_type_node,
388                                              attributes);
389
390       /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
391          the standard C++ floating-point types.  Logic earlier in this
392          function has already eliminated the possibility that
393          TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
394          compelling reason to choose one or the other.  */
395       return build_type_attribute_variant (t1, attributes);
396     }
397 }
398
399 /* T1 and T2 are arithmetic or enumeration types.  Return the type
400    that will result from the "usual arithmetic conversions" on T1 and
401    T2 as described in [expr].  */
402
403 tree
404 type_after_usual_arithmetic_conversions (tree t1, tree t2)
405 {
406   gcc_assert (ARITHMETIC_TYPE_P (t1)
407               || TREE_CODE (t1) == VECTOR_TYPE
408               || UNSCOPED_ENUM_P (t1));
409   gcc_assert (ARITHMETIC_TYPE_P (t2)
410               || TREE_CODE (t2) == VECTOR_TYPE
411               || UNSCOPED_ENUM_P (t2));
412
413   /* Perform the integral promotions.  We do not promote real types here.  */
414   if (INTEGRAL_OR_ENUMERATION_TYPE_P (t1)
415       && INTEGRAL_OR_ENUMERATION_TYPE_P (t2))
416     {
417       t1 = type_promotes_to (t1);
418       t2 = type_promotes_to (t2);
419     }
420
421   return cp_common_type (t1, t2);
422 }
423
424 /* Subroutine of composite_pointer_type to implement the recursive
425    case.  See that function for documentation of the parameters.  */
426
427 static tree
428 composite_pointer_type_r (tree t1, tree t2, 
429                           composite_pointer_operation operation,
430                           tsubst_flags_t complain)
431 {
432   tree pointee1;
433   tree pointee2;
434   tree result_type;
435   tree attributes;
436
437   /* Determine the types pointed to by T1 and T2.  */
438   if (TREE_CODE (t1) == POINTER_TYPE)
439     {
440       pointee1 = TREE_TYPE (t1);
441       pointee2 = TREE_TYPE (t2);
442     }
443   else
444     {
445       pointee1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1);
446       pointee2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2);
447     }
448
449   /* [expr.rel]
450
451      Otherwise, the composite pointer type is a pointer type
452      similar (_conv.qual_) to the type of one of the operands,
453      with a cv-qualification signature (_conv.qual_) that is the
454      union of the cv-qualification signatures of the operand
455      types.  */
456   if (same_type_ignoring_top_level_qualifiers_p (pointee1, pointee2))
457     result_type = pointee1;
458   else if ((TREE_CODE (pointee1) == POINTER_TYPE
459             && TREE_CODE (pointee2) == POINTER_TYPE)
460            || (TYPE_PTR_TO_MEMBER_P (pointee1)
461                && TYPE_PTR_TO_MEMBER_P (pointee2)))
462     result_type = composite_pointer_type_r (pointee1, pointee2, operation,
463                                             complain);
464   else
465     {
466       if (complain & tf_error)
467         {
468           switch (operation)
469             {
470             case CPO_COMPARISON:
471               permerror (input_location, "comparison between "
472                          "distinct pointer types %qT and %qT lacks a cast",
473                          t1, t2);
474               break;
475             case CPO_CONVERSION:
476               permerror (input_location, "conversion between "
477                          "distinct pointer types %qT and %qT lacks a cast",
478                          t1, t2);
479               break;
480             case CPO_CONDITIONAL_EXPR:
481               permerror (input_location, "conditional expression between "
482                          "distinct pointer types %qT and %qT lacks a cast",
483                          t1, t2);
484               break;
485             default:
486               gcc_unreachable ();
487             }
488         }
489       result_type = void_type_node;
490     }
491   result_type = cp_build_qualified_type (result_type,
492                                          (cp_type_quals (pointee1)
493                                           | cp_type_quals (pointee2)));
494   /* If the original types were pointers to members, so is the
495      result.  */
496   if (TYPE_PTR_TO_MEMBER_P (t1))
497     {
498       if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
499                         TYPE_PTRMEM_CLASS_TYPE (t2))
500           && (complain & tf_error))
501         {
502           switch (operation)
503             {
504             case CPO_COMPARISON:
505               permerror (input_location, "comparison between "
506                          "distinct pointer types %qT and %qT lacks a cast", 
507                          t1, t2);
508               break;
509             case CPO_CONVERSION:
510               permerror (input_location, "conversion between "
511                          "distinct pointer types %qT and %qT lacks a cast",
512                          t1, t2);
513               break;
514             case CPO_CONDITIONAL_EXPR:
515               permerror (input_location, "conditional expression between "
516                          "distinct pointer types %qT and %qT lacks a cast",
517                          t1, t2);
518               break;
519             default:
520               gcc_unreachable ();
521             }
522         }
523       result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
524                                        result_type);
525     }
526   else
527     result_type = build_pointer_type (result_type);
528
529   /* Merge the attributes.  */
530   attributes = (*targetm.merge_type_attributes) (t1, t2);
531   return build_type_attribute_variant (result_type, attributes);
532 }
533
534 /* Return the composite pointer type (see [expr.rel]) for T1 and T2.
535    ARG1 and ARG2 are the values with those types.  The OPERATION is to
536    describe the operation between the pointer types,
537    in case an error occurs.
538
539    This routine also implements the computation of a common type for
540    pointers-to-members as per [expr.eq].  */
541
542 tree
543 composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2,
544                         composite_pointer_operation operation, 
545                         tsubst_flags_t complain)
546 {
547   tree class1;
548   tree class2;
549
550   /* [expr.rel]
551
552      If one operand is a null pointer constant, the composite pointer
553      type is the type of the other operand.  */
554   if (null_ptr_cst_p (arg1))
555     return t2;
556   if (null_ptr_cst_p (arg2))
557     return t1;
558
559   /* We have:
560
561        [expr.rel]
562
563        If one of the operands has type "pointer to cv1 void*", then
564        the other has type "pointer to cv2T", and the composite pointer
565        type is "pointer to cv12 void", where cv12 is the union of cv1
566        and cv2.
567
568     If either type is a pointer to void, make sure it is T1.  */
569   if (TREE_CODE (t2) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t2)))
570     {
571       tree t;
572       t = t1;
573       t1 = t2;
574       t2 = t;
575     }
576
577   /* Now, if T1 is a pointer to void, merge the qualifiers.  */
578   if (TREE_CODE (t1) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t1)))
579     {
580       tree attributes;
581       tree result_type;
582
583       if (TYPE_PTRFN_P (t2) && (complain & tf_error))
584         {
585           switch (operation)
586               {
587               case CPO_COMPARISON:
588                 pedwarn (input_location, OPT_pedantic, 
589                          "ISO C++ forbids comparison between "
590                          "pointer of type %<void *%> and pointer-to-function");
591                 break;
592               case CPO_CONVERSION:
593                 pedwarn (input_location, OPT_pedantic,
594                          "ISO C++ forbids conversion between "
595                          "pointer of type %<void *%> and pointer-to-function");
596                 break;
597               case CPO_CONDITIONAL_EXPR:
598                 pedwarn (input_location, OPT_pedantic,
599                          "ISO C++ forbids conditional expression between "
600                          "pointer of type %<void *%> and pointer-to-function");
601                 break;
602               default:
603                 gcc_unreachable ();
604               }
605         }
606       result_type
607         = cp_build_qualified_type (void_type_node,
608                                    (cp_type_quals (TREE_TYPE (t1))
609                                     | cp_type_quals (TREE_TYPE (t2))));
610       result_type = build_pointer_type (result_type);
611       /* Merge the attributes.  */
612       attributes = (*targetm.merge_type_attributes) (t1, t2);
613       return build_type_attribute_variant (result_type, attributes);
614     }
615
616   if (c_dialect_objc () && TREE_CODE (t1) == POINTER_TYPE
617       && TREE_CODE (t2) == POINTER_TYPE)
618     {
619       if (objc_compare_types (t1, t2, -3, NULL_TREE))
620         return t1;
621     }
622
623   /* [expr.eq] permits the application of a pointer conversion to
624      bring the pointers to a common type.  */
625   if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE
626       && CLASS_TYPE_P (TREE_TYPE (t1))
627       && CLASS_TYPE_P (TREE_TYPE (t2))
628       && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t1),
629                                                      TREE_TYPE (t2)))
630     {
631       class1 = TREE_TYPE (t1);
632       class2 = TREE_TYPE (t2);
633
634       if (DERIVED_FROM_P (class1, class2))
635         t2 = (build_pointer_type
636               (cp_build_qualified_type (class1, TYPE_QUALS (class2))));
637       else if (DERIVED_FROM_P (class2, class1))
638         t1 = (build_pointer_type
639               (cp_build_qualified_type (class2, TYPE_QUALS (class1))));
640       else
641         {
642           if (complain & tf_error)
643             switch (operation)
644               {
645               case CPO_COMPARISON:
646                 error ("comparison between distinct "
647                        "pointer types %qT and %qT lacks a cast", t1, t2);
648                 break;
649               case CPO_CONVERSION:
650                 error ("conversion between distinct "
651                        "pointer types %qT and %qT lacks a cast", t1, t2);
652                 break;
653               case CPO_CONDITIONAL_EXPR:
654                 error ("conditional expression between distinct "
655                        "pointer types %qT and %qT lacks a cast", t1, t2);
656                 break;
657               default:
658                 gcc_unreachable ();
659               }
660           return error_mark_node;
661         }
662     }
663   /* [expr.eq] permits the application of a pointer-to-member
664      conversion to change the class type of one of the types.  */
665   else if (TYPE_PTR_TO_MEMBER_P (t1)
666            && !same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
667                             TYPE_PTRMEM_CLASS_TYPE (t2)))
668     {
669       class1 = TYPE_PTRMEM_CLASS_TYPE (t1);
670       class2 = TYPE_PTRMEM_CLASS_TYPE (t2);
671
672       if (DERIVED_FROM_P (class1, class2))
673         t1 = build_ptrmem_type (class2, TYPE_PTRMEM_POINTED_TO_TYPE (t1));
674       else if (DERIVED_FROM_P (class2, class1))
675         t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2));
676       else
677         {
678           if (complain & tf_error)
679             switch (operation)
680               {
681               case CPO_COMPARISON:
682                 error ("comparison between distinct "
683                        "pointer-to-member types %qT and %qT lacks a cast",
684                        t1, t2);
685                 break;
686               case CPO_CONVERSION:
687                 error ("conversion between distinct "
688                        "pointer-to-member types %qT and %qT lacks a cast",
689                        t1, t2);
690                 break;
691               case CPO_CONDITIONAL_EXPR:
692                 error ("conditional expression between distinct "
693                        "pointer-to-member types %qT and %qT lacks a cast",
694                        t1, t2);
695                 break;
696               default:
697                 gcc_unreachable ();
698               }
699           return error_mark_node;
700         }
701     }
702
703   return composite_pointer_type_r (t1, t2, operation, complain);
704 }
705
706 /* Return the merged type of two types.
707    We assume that comptypes has already been done and returned 1;
708    if that isn't so, this may crash.
709
710    This just combines attributes and default arguments; any other
711    differences would cause the two types to compare unalike.  */
712
713 tree
714 merge_types (tree t1, tree t2)
715 {
716   enum tree_code code1;
717   enum tree_code code2;
718   tree attributes;
719
720   /* Save time if the two types are the same.  */
721   if (t1 == t2)
722     return t1;
723   if (original_type (t1) == original_type (t2))
724     return t1;
725
726   /* If one type is nonsense, use the other.  */
727   if (t1 == error_mark_node)
728     return t2;
729   if (t2 == error_mark_node)
730     return t1;
731
732   /* Merge the attributes.  */
733   attributes = (*targetm.merge_type_attributes) (t1, t2);
734
735   if (TYPE_PTRMEMFUNC_P (t1))
736     t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
737   if (TYPE_PTRMEMFUNC_P (t2))
738     t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
739
740   code1 = TREE_CODE (t1);
741   code2 = TREE_CODE (t2);
742   if (code1 != code2)
743     {
744       gcc_assert (code1 == TYPENAME_TYPE || code2 == TYPENAME_TYPE);
745       if (code1 == TYPENAME_TYPE)
746         {
747           t1 = resolve_typename_type (t1, /*only_current_p=*/true);
748           code1 = TREE_CODE (t1);
749         }
750       else
751         {
752           t2 = resolve_typename_type (t2, /*only_current_p=*/true);
753           code2 = TREE_CODE (t2);
754         }
755     }
756
757   switch (code1)
758     {
759     case POINTER_TYPE:
760     case REFERENCE_TYPE:
761       /* For two pointers, do this recursively on the target type.  */
762       {
763         tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
764         int quals = cp_type_quals (t1);
765
766         if (code1 == POINTER_TYPE)
767           t1 = build_pointer_type (target);
768         else
769           t1 = cp_build_reference_type (target, TYPE_REF_IS_RVALUE (t1));
770         t1 = build_type_attribute_variant (t1, attributes);
771         t1 = cp_build_qualified_type (t1, quals);
772
773         if (TREE_CODE (target) == METHOD_TYPE)
774           t1 = build_ptrmemfunc_type (t1);
775
776         return t1;
777       }
778
779     case OFFSET_TYPE:
780       {
781         int quals;
782         tree pointee;
783         quals = cp_type_quals (t1);
784         pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1),
785                                TYPE_PTRMEM_POINTED_TO_TYPE (t2));
786         t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
787                                 pointee);
788         t1 = cp_build_qualified_type (t1, quals);
789         break;
790       }
791
792     case ARRAY_TYPE:
793       {
794         tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
795         /* Save space: see if the result is identical to one of the args.  */
796         if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
797           return build_type_attribute_variant (t1, attributes);
798         if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
799           return build_type_attribute_variant (t2, attributes);
800         /* Merge the element types, and have a size if either arg has one.  */
801         t1 = build_cplus_array_type
802           (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
803         break;
804       }
805
806     case FUNCTION_TYPE:
807       /* Function types: prefer the one that specified arg types.
808          If both do, merge the arg types.  Also merge the return types.  */
809       {
810         tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
811         tree p1 = TYPE_ARG_TYPES (t1);
812         tree p2 = TYPE_ARG_TYPES (t2);
813         tree rval, raises;
814
815         /* Save space: see if the result is identical to one of the args.  */
816         if (valtype == TREE_TYPE (t1) && ! p2)
817           return cp_build_type_attribute_variant (t1, attributes);
818         if (valtype == TREE_TYPE (t2) && ! p1)
819           return cp_build_type_attribute_variant (t2, attributes);
820
821         /* Simple way if one arg fails to specify argument types.  */
822         if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
823           {
824             rval = build_function_type (valtype, p2);
825             if ((raises = TYPE_RAISES_EXCEPTIONS (t2)))
826               rval = build_exception_variant (rval, raises);
827             return cp_build_type_attribute_variant (rval, attributes);
828           }
829         raises = TYPE_RAISES_EXCEPTIONS (t1);
830         if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
831           {
832             rval = build_function_type (valtype, p1);
833             if (raises)
834               rval = build_exception_variant (rval, raises);
835             return cp_build_type_attribute_variant (rval, attributes);
836           }
837
838         rval = build_function_type (valtype, commonparms (p1, p2));
839         t1 = build_exception_variant (rval, raises);
840         break;
841       }
842
843     case METHOD_TYPE:
844       {
845         /* Get this value the long way, since TYPE_METHOD_BASETYPE
846            is just the main variant of this.  */
847         tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2)));
848         tree raises = TYPE_RAISES_EXCEPTIONS (t1);
849         tree t3;
850
851         /* If this was a member function type, get back to the
852            original type of type member function (i.e., without
853            the class instance variable up front.  */
854         t1 = build_function_type (TREE_TYPE (t1),
855                                   TREE_CHAIN (TYPE_ARG_TYPES (t1)));
856         t2 = build_function_type (TREE_TYPE (t2),
857                                   TREE_CHAIN (TYPE_ARG_TYPES (t2)));
858         t3 = merge_types (t1, t2);
859         t3 = build_method_type_directly (basetype, TREE_TYPE (t3),
860                                          TYPE_ARG_TYPES (t3));
861         t1 = build_exception_variant (t3, raises);
862         break;
863       }
864
865     case TYPENAME_TYPE:
866       /* There is no need to merge attributes into a TYPENAME_TYPE.
867          When the type is instantiated it will have whatever
868          attributes result from the instantiation.  */
869       return t1;
870
871     default:;
872     }
873
874   if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes))
875     return t1;
876   else if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes))
877     return t2;
878   else
879     return cp_build_type_attribute_variant (t1, attributes);
880 }
881
882 /* Return the ARRAY_TYPE type without its domain.  */
883
884 tree
885 strip_array_domain (tree type)
886 {
887   tree t2;
888   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
889   if (TYPE_DOMAIN (type) == NULL_TREE)
890     return type;
891   t2 = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
892   return cp_build_type_attribute_variant (t2, TYPE_ATTRIBUTES (type));
893 }
894
895 /* Wrapper around cp_common_type that is used by c-common.c and other
896    front end optimizations that remove promotions.  
897
898    Return the common type for two arithmetic types T1 and T2 under the
899    usual arithmetic conversions.  The default conversions have already
900    been applied, and enumerated types converted to their compatible
901    integer types.  */
902
903 tree
904 common_type (tree t1, tree t2)
905 {
906   /* If one type is nonsense, use the other  */
907   if (t1 == error_mark_node)
908     return t2;
909   if (t2 == error_mark_node)
910     return t1;
911
912   return cp_common_type (t1, t2);
913 }
914
915 /* Return the common type of two pointer types T1 and T2.  This is the
916    type for the result of most arithmetic operations if the operands
917    have the given two types.
918  
919    We assume that comp_target_types has already been done and returned
920    nonzero; if that isn't so, this may crash.  */
921
922 tree
923 common_pointer_type (tree t1, tree t2)
924 {
925   gcc_assert ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
926               || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
927               || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)));
928
929   return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
930                                  CPO_CONVERSION, tf_warning_or_error);
931 }
932 \f
933 /* Compare two exception specifier types for exactness or subsetness, if
934    allowed. Returns false for mismatch, true for match (same, or
935    derived and !exact).
936
937    [except.spec] "If a class X ... objects of class X or any class publicly
938    and unambiguously derived from X. Similarly, if a pointer type Y * ...
939    exceptions of type Y * or that are pointers to any type publicly and
940    unambiguously derived from Y. Otherwise a function only allows exceptions
941    that have the same type ..."
942    This does not mention cv qualifiers and is different to what throw
943    [except.throw] and catch [except.catch] will do. They will ignore the
944    top level cv qualifiers, and allow qualifiers in the pointer to class
945    example.
946
947    We implement the letter of the standard.  */
948
949 static bool
950 comp_except_types (tree a, tree b, bool exact)
951 {
952   if (same_type_p (a, b))
953     return true;
954   else if (!exact)
955     {
956       if (cp_type_quals (a) || cp_type_quals (b))
957         return false;
958
959       if (TREE_CODE (a) == POINTER_TYPE
960           && TREE_CODE (b) == POINTER_TYPE)
961         {
962           a = TREE_TYPE (a);
963           b = TREE_TYPE (b);
964           if (cp_type_quals (a) || cp_type_quals (b))
965             return false;
966         }
967
968       if (TREE_CODE (a) != RECORD_TYPE
969           || TREE_CODE (b) != RECORD_TYPE)
970         return false;
971
972       if (PUBLICLY_UNIQUELY_DERIVED_P (a, b))
973         return true;
974     }
975   return false;
976 }
977
978 /* Return true if TYPE1 and TYPE2 are equivalent exception specifiers.
979    If EXACT is false, T2 can be stricter than T1 (according to 15.4/7),
980    otherwise it must be exact. Exception lists are unordered, but
981    we've already filtered out duplicates. Most lists will be in order,
982    we should try to make use of that.  */
983
984 bool
985 comp_except_specs (const_tree t1, const_tree t2, bool exact)
986 {
987   const_tree probe;
988   const_tree base;
989   int  length = 0;
990
991   if (t1 == t2)
992     return true;
993
994   if (t1 == NULL_TREE)                     /* T1 is ...  */
995     return t2 == NULL_TREE || !exact;
996   if (!TREE_VALUE (t1))                    /* t1 is EMPTY */
997     return t2 != NULL_TREE && !TREE_VALUE (t2);
998   if (t2 == NULL_TREE)                     /* T2 is ...  */
999     return false;
1000   if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
1001     return !exact;
1002
1003   /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
1004      Count how many we find, to determine exactness. For exact matching and
1005      ordered T1, T2, this is an O(n) operation, otherwise its worst case is
1006      O(nm).  */
1007   for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
1008     {
1009       for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
1010         {
1011           tree a = TREE_VALUE (probe);
1012           tree b = TREE_VALUE (t2);
1013
1014           if (comp_except_types (a, b, exact))
1015             {
1016               if (probe == base && exact)
1017                 base = TREE_CHAIN (probe);
1018               length++;
1019               break;
1020             }
1021         }
1022       if (probe == NULL_TREE)
1023         return false;
1024     }
1025   return !exact || base == NULL_TREE || length == list_length (t1);
1026 }
1027
1028 /* Compare the array types T1 and T2.  ALLOW_REDECLARATION is true if
1029    [] can match [size].  */
1030
1031 static bool
1032 comp_array_types (const_tree t1, const_tree t2, bool allow_redeclaration)
1033 {
1034   tree d1;
1035   tree d2;
1036   tree max1, max2;
1037
1038   if (t1 == t2)
1039     return true;
1040
1041   /* The type of the array elements must be the same.  */
1042   if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1043     return false;
1044
1045   d1 = TYPE_DOMAIN (t1);
1046   d2 = TYPE_DOMAIN (t2);
1047
1048   if (d1 == d2)
1049     return true;
1050
1051   /* If one of the arrays is dimensionless, and the other has a
1052      dimension, they are of different types.  However, it is valid to
1053      write:
1054
1055        extern int a[];
1056        int a[3];
1057
1058      by [basic.link]:
1059
1060        declarations for an array object can specify
1061        array types that differ by the presence or absence of a major
1062        array bound (_dcl.array_).  */
1063   if (!d1 || !d2)
1064     return allow_redeclaration;
1065
1066   /* Check that the dimensions are the same.  */
1067
1068   if (!cp_tree_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2)))
1069     return false;
1070   max1 = TYPE_MAX_VALUE (d1);
1071   max2 = TYPE_MAX_VALUE (d2);
1072   if (processing_template_decl && !abi_version_at_least (2)
1073       && !value_dependent_expression_p (max1)
1074       && !value_dependent_expression_p (max2))
1075     {
1076       /* With abi-1 we do not fold non-dependent array bounds, (and
1077          consequently mangle them incorrectly).  We must therefore
1078          fold them here, to verify the domains have the same
1079          value.  */
1080       max1 = fold (max1);
1081       max2 = fold (max2);
1082     }
1083
1084   if (!cp_tree_equal (max1, max2))
1085     return false;
1086
1087   return true;
1088 }
1089
1090 /* Compare the relative position of T1 and T2 into their respective
1091    template parameter list.
1092    T1 and T2 must be template parameter types.
1093    Return TRUE if T1 and T2 have the same position, FALSE otherwise.  */
1094
1095 static bool
1096 comp_template_parms_position (tree t1, tree t2)
1097 {
1098   gcc_assert (t1 && t2
1099               && TREE_CODE (t1) == TREE_CODE (t2)
1100               && (TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM
1101                   || TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM
1102                   || TREE_CODE (t1) == TEMPLATE_TYPE_PARM));
1103
1104       if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
1105           || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2)
1106           || (TEMPLATE_TYPE_PARAMETER_PACK (t1) 
1107               != TEMPLATE_TYPE_PARAMETER_PACK (t2)))
1108         return false;
1109
1110       return true;
1111 }
1112
1113 /* Subroutine of incompatible_dependent_types_p.
1114    Return the template parameter of the dependent type T.
1115    If T is a typedef, return the template parameters of
1116    the _decl_ of the typedef. T must be a dependent type.  */
1117
1118 static tree
1119 get_template_parms_of_dependent_type (tree t)
1120 {
1121   tree tinfo = NULL_TREE, tparms = NULL_TREE;
1122
1123   /* First, try the obvious case of getting the
1124      template info from T itself.  */
1125   if ((tinfo = get_template_info (t)))
1126     ;
1127   else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
1128     return TEMPLATE_TYPE_PARM_SIBLING_PARMS (t);
1129   else if (typedef_variant_p (t)
1130            && !NAMESPACE_SCOPE_P (TYPE_NAME (t)))
1131     tinfo = get_template_info (DECL_CONTEXT (TYPE_NAME (t)));
1132   /* If T is a TYPENAME_TYPE which context is a template type
1133      parameter, get the template parameters from that context.  */
1134   else if (TYPE_CONTEXT (t)
1135            && TREE_CODE (TYPE_CONTEXT (t)) == TEMPLATE_TYPE_PARM)
1136    return TEMPLATE_TYPE_PARM_SIBLING_PARMS (TYPE_CONTEXT (t));
1137   else if (TYPE_CONTEXT (t)
1138            && !NAMESPACE_SCOPE_P (t))
1139     tinfo = get_template_info (TYPE_CONTEXT (t));
1140
1141   if (tinfo)
1142     tparms = DECL_TEMPLATE_PARMS (TI_TEMPLATE (tinfo));
1143
1144   return tparms;
1145 }
1146
1147 /* Subroutine of structural_comptypes.
1148    Compare the dependent types T1 and T2.
1149    Return TRUE if we are sure they can't be equal, FALSE otherwise.
1150    The whole point of this function is to support cases where either T1 or
1151    T2 is a typedef. In those cases, we need to compare the template parameters
1152    of the _decl_ of the typedef. If those don't match then we know T1
1153    and T2 cannot be equal.  */
1154
1155 static bool
1156 incompatible_dependent_types_p (tree t1, tree t2)
1157 {
1158   tree tparms1 = NULL_TREE, tparms2 = NULL_TREE;
1159   bool t1_typedef_variant_p, t2_typedef_variant_p;
1160
1161   if (!uses_template_parms (t1) || !uses_template_parms (t2))
1162     return false;
1163
1164   if (TREE_CODE (t1) == TEMPLATE_TYPE_PARM)
1165     {
1166       /* If T1 and T2 don't have the same relative position in their
1167          template parameters set, they can't be equal.  */
1168       if (!comp_template_parms_position (t1, t2))
1169         return true;
1170     }
1171
1172   t1_typedef_variant_p = typedef_variant_p (t1);
1173   t2_typedef_variant_p = typedef_variant_p (t2);
1174
1175   /* Either T1 or T2 must be a typedef.  */
1176   if (!t1_typedef_variant_p && !t2_typedef_variant_p)
1177     return false;
1178
1179   if (!t1_typedef_variant_p || !t2_typedef_variant_p)
1180     /* Either T1 or T2 is not a typedef so we cannot compare the
1181        the template parms of the typedefs of T1 and T2.
1182        At this point, if the main variant type of T1 and T2 are equal
1183        it means the two types can't be incompatible, from the perspective
1184        of this function.  */
1185     if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
1186       return false;
1187
1188   /* So if we reach this point, it means either T1 or T2 is a typedef variant.
1189      Let's compare their template parameters.  */
1190
1191   tparms1 = get_template_parms_of_dependent_type (t1);
1192   tparms2 = get_template_parms_of_dependent_type (t2);
1193
1194   /* If T2 is a template type parm and if we could not get the template
1195      parms it belongs to, that means we have not finished parsing the
1196      full set of template parameters of the template declaration it
1197      belongs to yet. If we could get the template parms T1 belongs to,
1198      that mostly means T1 and T2 belongs to templates that are
1199      different and incompatible.  */
1200   if (TREE_CODE (t1) == TEMPLATE_TYPE_PARM
1201       && (tparms1 == NULL_TREE || tparms2 == NULL_TREE)
1202       && tparms1 != tparms2)
1203     return true;
1204
1205   if (tparms1 == NULL_TREE
1206       || tparms2 == NULL_TREE
1207       || tparms1 == tparms2)
1208     return false;
1209
1210   /* And now compare the mighty template parms!  */
1211   return !comp_template_parms (tparms1, tparms2);
1212 }
1213
1214 /* Subroutine in comptypes.  */
1215
1216 static bool
1217 structural_comptypes (tree t1, tree t2, int strict)
1218 {
1219   if (t1 == t2)
1220     return true;
1221
1222   /* Suppress errors caused by previously reported errors.  */
1223   if (t1 == error_mark_node || t2 == error_mark_node)
1224     return false;
1225
1226   gcc_assert (TYPE_P (t1) && TYPE_P (t2));
1227
1228   /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
1229      current instantiation.  */
1230   if (TREE_CODE (t1) == TYPENAME_TYPE)
1231     t1 = resolve_typename_type (t1, /*only_current_p=*/true);
1232
1233   if (TREE_CODE (t2) == TYPENAME_TYPE)
1234     t2 = resolve_typename_type (t2, /*only_current_p=*/true);
1235
1236   if (TYPE_PTRMEMFUNC_P (t1))
1237     t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
1238   if (TYPE_PTRMEMFUNC_P (t2))
1239     t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
1240
1241   /* Different classes of types can't be compatible.  */
1242   if (TREE_CODE (t1) != TREE_CODE (t2))
1243     return false;
1244
1245   /* Qualifiers must match.  For array types, we will check when we
1246      recur on the array element types.  */
1247   if (TREE_CODE (t1) != ARRAY_TYPE
1248       && TYPE_QUALS (t1) != TYPE_QUALS (t2))
1249     return false;
1250   if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
1251     return false;
1252
1253   /* If T1 and T2 are dependent typedefs then check upfront that
1254      the template parameters of their typedef DECLs match before
1255      going down checking their subtypes.  */
1256   if (incompatible_dependent_types_p (t1, t2))
1257     return false;
1258
1259   /* Allow for two different type nodes which have essentially the same
1260      definition.  Note that we already checked for equality of the type
1261      qualifiers (just above).  */
1262
1263   if (TREE_CODE (t1) != ARRAY_TYPE
1264       && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
1265     return true;
1266
1267
1268   /* Compare the types.  Break out if they could be the same.  */
1269   switch (TREE_CODE (t1))
1270     {
1271     case VOID_TYPE:
1272     case BOOLEAN_TYPE:
1273       /* All void and bool types are the same.  */
1274       break;
1275
1276     case INTEGER_TYPE:
1277     case FIXED_POINT_TYPE:
1278     case REAL_TYPE:
1279       /* With these nodes, we can't determine type equivalence by
1280          looking at what is stored in the nodes themselves, because
1281          two nodes might have different TYPE_MAIN_VARIANTs but still
1282          represent the same type.  For example, wchar_t and int could
1283          have the same properties (TYPE_PRECISION, TYPE_MIN_VALUE,
1284          TYPE_MAX_VALUE, etc.), but have different TYPE_MAIN_VARIANTs
1285          and are distinct types. On the other hand, int and the
1286          following typedef
1287
1288            typedef int INT __attribute((may_alias));
1289
1290          have identical properties, different TYPE_MAIN_VARIANTs, but
1291          represent the same type.  The canonical type system keeps
1292          track of equivalence in this case, so we fall back on it.  */
1293       return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
1294
1295     case TEMPLATE_TEMPLATE_PARM:
1296     case BOUND_TEMPLATE_TEMPLATE_PARM:
1297       if (!comp_template_parms_position (t1, t2))
1298         return false;
1299       if (!comp_template_parms
1300           (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
1301            DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2))))
1302         return false;
1303       if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM)
1304         break;
1305       /* Don't check inheritance.  */
1306       strict = COMPARE_STRICT;
1307       /* Fall through.  */
1308
1309     case RECORD_TYPE:
1310     case UNION_TYPE:
1311       if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2)
1312           && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2)
1313               || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM)
1314           && comp_template_args (TYPE_TI_ARGS (t1), TYPE_TI_ARGS (t2)))
1315         break;
1316
1317       if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2))
1318         break;
1319       else if ((strict & COMPARE_DERIVED) && DERIVED_FROM_P (t2, t1))
1320         break;
1321
1322       return false;
1323
1324     case OFFSET_TYPE:
1325       if (!comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2),
1326                       strict & ~COMPARE_REDECLARATION))
1327         return false;
1328       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1329         return false;
1330       break;
1331
1332     case REFERENCE_TYPE:
1333       if (TYPE_REF_IS_RVALUE (t1) != TYPE_REF_IS_RVALUE (t2))
1334         return false;
1335       /* fall through to checks for pointer types */
1336
1337     case POINTER_TYPE:
1338       if (TYPE_MODE (t1) != TYPE_MODE (t2)
1339           || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2)
1340           || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1341         return false;
1342       break;
1343
1344     case METHOD_TYPE:
1345     case FUNCTION_TYPE:
1346       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1347         return false;
1348       if (!compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)))
1349         return false;
1350       break;
1351
1352     case ARRAY_TYPE:
1353       /* Target types must match incl. qualifiers.  */
1354       if (!comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION)))
1355         return false;
1356       break;
1357
1358     case TEMPLATE_TYPE_PARM:
1359       /* If incompatible_dependent_types_p called earlier didn't decide
1360          T1 and T2 were different, they might be equal.  */
1361       break;
1362
1363     case TYPENAME_TYPE:
1364       if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1365                           TYPENAME_TYPE_FULLNAME (t2)))
1366         return false;
1367       if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1368         return false;
1369       break;
1370
1371     case UNBOUND_CLASS_TEMPLATE:
1372       if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2)))
1373         return false;
1374       if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1375         return false;
1376       break;
1377
1378     case COMPLEX_TYPE:
1379       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1380         return false;
1381       break;
1382
1383     case VECTOR_TYPE:
1384       if (TYPE_VECTOR_SUBPARTS (t1) != TYPE_VECTOR_SUBPARTS (t2)
1385           || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1386         return false;
1387       break;
1388
1389     case TYPE_PACK_EXPANSION:
1390       return same_type_p (PACK_EXPANSION_PATTERN (t1), 
1391                           PACK_EXPANSION_PATTERN (t2));
1392
1393     case DECLTYPE_TYPE:
1394       if (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t1)
1395           != DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t2)
1396           || (DECLTYPE_FOR_LAMBDA_CAPTURE (t1)
1397               != DECLTYPE_FOR_LAMBDA_CAPTURE (t2))
1398           || (DECLTYPE_FOR_LAMBDA_RETURN (t1)
1399               != DECLTYPE_FOR_LAMBDA_RETURN (t2))
1400           || !cp_tree_equal (DECLTYPE_TYPE_EXPR (t1), 
1401                              DECLTYPE_TYPE_EXPR (t2)))
1402         return false;
1403       break;
1404
1405     default:
1406       return false;
1407     }
1408
1409   /* If we get here, we know that from a target independent POV the
1410      types are the same.  Make sure the target attributes are also
1411      the same.  */
1412   return targetm.comp_type_attributes (t1, t2);
1413 }
1414
1415 /* Return true if T1 and T2 are related as allowed by STRICT.  STRICT
1416    is a bitwise-or of the COMPARE_* flags.  */
1417
1418 bool
1419 comptypes (tree t1, tree t2, int strict)
1420 {
1421   if (strict == COMPARE_STRICT)
1422     {
1423       if (t1 == t2)
1424         return true;
1425
1426       if (t1 == error_mark_node || t2 == error_mark_node)
1427         return false;
1428
1429       if (TYPE_STRUCTURAL_EQUALITY_P (t1) || TYPE_STRUCTURAL_EQUALITY_P (t2))
1430         /* At least one of the types requires structural equality, so
1431            perform a deep check. */
1432         return structural_comptypes (t1, t2, strict);
1433
1434 #ifdef ENABLE_CHECKING
1435       if (USE_CANONICAL_TYPES)
1436         {
1437           bool result = structural_comptypes (t1, t2, strict);
1438           
1439           if (result && TYPE_CANONICAL (t1) != TYPE_CANONICAL (t2))
1440             /* The two types are structurally equivalent, but their
1441                canonical types were different. This is a failure of the
1442                canonical type propagation code.*/
1443             internal_error 
1444               ("canonical types differ for identical types %T and %T", 
1445                t1, t2);
1446           else if (!result && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2))
1447             /* Two types are structurally different, but the canonical
1448                types are the same. This means we were over-eager in
1449                assigning canonical types. */
1450             internal_error 
1451               ("same canonical type node for different types %T and %T",
1452                t1, t2);
1453           
1454           return result;
1455         }
1456 #else
1457       if (USE_CANONICAL_TYPES)
1458         return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
1459 #endif
1460       else
1461         return structural_comptypes (t1, t2, strict);
1462     }
1463   else if (strict == COMPARE_STRUCTURAL)
1464     return structural_comptypes (t1, t2, COMPARE_STRICT);
1465   else
1466     return structural_comptypes (t1, t2, strict);
1467 }
1468
1469 /* Returns 1 if TYPE1 is at least as qualified as TYPE2.  */
1470
1471 bool
1472 at_least_as_qualified_p (const_tree type1, const_tree type2)
1473 {
1474   int q1 = cp_type_quals (type1);
1475   int q2 = cp_type_quals (type2);
1476
1477   /* All qualifiers for TYPE2 must also appear in TYPE1.  */
1478   return (q1 & q2) == q2;
1479 }
1480
1481 /* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1482    more cv-qualified that TYPE1, and 0 otherwise.  */
1483
1484 int
1485 comp_cv_qualification (const_tree type1, const_tree type2)
1486 {
1487   int q1 = cp_type_quals (type1);
1488   int q2 = cp_type_quals (type2);
1489
1490   if (q1 == q2)
1491     return 0;
1492
1493   if ((q1 & q2) == q2)
1494     return 1;
1495   else if ((q1 & q2) == q1)
1496     return -1;
1497
1498   return 0;
1499 }
1500
1501 /* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1502    subset of the cv-qualification signature of TYPE2, and the types
1503    are similar.  Returns -1 if the other way 'round, and 0 otherwise.  */
1504
1505 int
1506 comp_cv_qual_signature (tree type1, tree type2)
1507 {
1508   if (comp_ptr_ttypes_real (type2, type1, -1))
1509     return 1;
1510   else if (comp_ptr_ttypes_real (type1, type2, -1))
1511     return -1;
1512   else
1513     return 0;
1514 }
1515 \f
1516 /* Subroutines of `comptypes'.  */
1517
1518 /* Return true if two parameter type lists PARMS1 and PARMS2 are
1519    equivalent in the sense that functions with those parameter types
1520    can have equivalent types.  The two lists must be equivalent,
1521    element by element.  */
1522
1523 bool
1524 compparms (const_tree parms1, const_tree parms2)
1525 {
1526   const_tree t1, t2;
1527
1528   /* An unspecified parmlist matches any specified parmlist
1529      whose argument types don't need default promotions.  */
1530
1531   for (t1 = parms1, t2 = parms2;
1532        t1 || t2;
1533        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1534     {
1535       /* If one parmlist is shorter than the other,
1536          they fail to match.  */
1537       if (!t1 || !t2)
1538         return false;
1539       if (!same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1540         return false;
1541     }
1542   return true;
1543 }
1544
1545 \f
1546 /* Process a sizeof or alignof expression where the operand is a
1547    type.  */
1548
1549 tree
1550 cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain)
1551 {
1552   tree value;
1553   bool dependent_p;
1554
1555   gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
1556   if (type == error_mark_node)
1557     return error_mark_node;
1558
1559   type = non_reference (type);
1560   if (TREE_CODE (type) == METHOD_TYPE)
1561     {
1562       if (complain)
1563         pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
1564                  "invalid application of %qs to a member function", 
1565                  operator_name_info[(int) op].name);
1566       value = size_one_node;
1567     }
1568
1569   dependent_p = dependent_type_p (type);
1570   if (!dependent_p)
1571     complete_type (type);
1572   if (dependent_p
1573       /* VLA types will have a non-constant size.  In the body of an
1574          uninstantiated template, we don't need to try to compute the
1575          value, because the sizeof expression is not an integral
1576          constant expression in that case.  And, if we do try to
1577          compute the value, we'll likely end up with SAVE_EXPRs, which
1578          the template substitution machinery does not expect to see.  */
1579       || (processing_template_decl 
1580           && COMPLETE_TYPE_P (type)
1581           && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST))
1582     {
1583       value = build_min (op, size_type_node, type);
1584       TREE_READONLY (value) = 1;
1585       return value;
1586     }
1587
1588   return c_sizeof_or_alignof_type (input_location, complete_type (type),
1589                                    op == SIZEOF_EXPR,
1590                                    complain);
1591 }
1592
1593 /* Return the size of the type, without producing any warnings for
1594    types whose size cannot be taken.  This routine should be used only
1595    in some other routine that has already produced a diagnostic about
1596    using the size of such a type.  */
1597 tree 
1598 cxx_sizeof_nowarn (tree type)
1599 {
1600   if (TREE_CODE (type) == FUNCTION_TYPE
1601       || TREE_CODE (type) == VOID_TYPE
1602       || TREE_CODE (type) == ERROR_MARK)
1603     return size_one_node;
1604   else if (!COMPLETE_TYPE_P (type))
1605     return size_zero_node;
1606   else
1607     return cxx_sizeof_or_alignof_type (type, SIZEOF_EXPR, false);
1608 }
1609
1610 /* Process a sizeof expression where the operand is an expression.  */
1611
1612 static tree
1613 cxx_sizeof_expr (tree e, tsubst_flags_t complain)
1614 {
1615   if (e == error_mark_node)
1616     return error_mark_node;
1617
1618   if (processing_template_decl)
1619     {
1620       e = build_min (SIZEOF_EXPR, size_type_node, e);
1621       TREE_SIDE_EFFECTS (e) = 0;
1622       TREE_READONLY (e) = 1;
1623
1624       return e;
1625     }
1626
1627   /* To get the size of a static data member declared as an array of
1628      unknown bound, we need to instantiate it.  */
1629   if (TREE_CODE (e) == VAR_DECL
1630       && VAR_HAD_UNKNOWN_BOUND (e)
1631       && DECL_TEMPLATE_INSTANTIATION (e))
1632     instantiate_decl (e, /*defer_ok*/true, /*expl_inst_mem*/false);
1633
1634   if (TREE_CODE (e) == COMPONENT_REF
1635       && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1636       && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1637     {
1638       if (complain & tf_error)
1639         error ("invalid application of %<sizeof%> to a bit-field");
1640       else
1641         return error_mark_node;
1642       e = char_type_node;
1643     }
1644   else if (is_overloaded_fn (e))
1645     {
1646       if (complain & tf_error)
1647         permerror (input_location, "ISO C++ forbids applying %<sizeof%> to an expression of "
1648                    "function type");
1649       else
1650         return error_mark_node;
1651       e = char_type_node;
1652     }
1653   else if (type_unknown_p (e))
1654     {
1655       if (complain & tf_error)
1656         cxx_incomplete_type_error (e, TREE_TYPE (e));
1657       else
1658         return error_mark_node;
1659       e = char_type_node;
1660     }
1661   else
1662     e = TREE_TYPE (e);
1663
1664   return cxx_sizeof_or_alignof_type (e, SIZEOF_EXPR, complain & tf_error);
1665 }
1666
1667 /* Implement the __alignof keyword: Return the minimum required
1668    alignment of E, measured in bytes.  For VAR_DECL's and
1669    FIELD_DECL's return DECL_ALIGN (which can be set from an
1670    "aligned" __attribute__ specification).  */
1671
1672 static tree
1673 cxx_alignof_expr (tree e, tsubst_flags_t complain)
1674 {
1675   tree t;
1676
1677   if (e == error_mark_node)
1678     return error_mark_node;
1679
1680   if (processing_template_decl)
1681     {
1682       e = build_min (ALIGNOF_EXPR, size_type_node, e);
1683       TREE_SIDE_EFFECTS (e) = 0;
1684       TREE_READONLY (e) = 1;
1685
1686       return e;
1687     }
1688
1689   if (TREE_CODE (e) == VAR_DECL)
1690     t = size_int (DECL_ALIGN_UNIT (e));
1691   else if (TREE_CODE (e) == COMPONENT_REF
1692            && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1693            && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1694     {
1695       if (complain & tf_error)
1696         error ("invalid application of %<__alignof%> to a bit-field");
1697       else
1698         return error_mark_node;
1699       t = size_one_node;
1700     }
1701   else if (TREE_CODE (e) == COMPONENT_REF
1702            && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL)
1703     t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (e, 1)));
1704   else if (is_overloaded_fn (e))
1705     {
1706       if (complain & tf_error)
1707         permerror (input_location, "ISO C++ forbids applying %<__alignof%> to an expression of "
1708                    "function type");
1709       else
1710         return error_mark_node;
1711       if (TREE_CODE (e) == FUNCTION_DECL)
1712         t = size_int (DECL_ALIGN_UNIT (e));
1713       else
1714         t = size_one_node;
1715     }
1716   else if (type_unknown_p (e))
1717     {
1718       if (complain & tf_error)
1719         cxx_incomplete_type_error (e, TREE_TYPE (e));
1720       else
1721         return error_mark_node;
1722       t = size_one_node;
1723     }
1724   else
1725     return cxx_sizeof_or_alignof_type (TREE_TYPE (e), ALIGNOF_EXPR, 
1726                                        complain & tf_error);
1727
1728   return fold_convert (size_type_node, t);
1729 }
1730
1731 /* Process a sizeof or alignof expression E with code OP where the operand
1732    is an expression.  */
1733
1734 tree
1735 cxx_sizeof_or_alignof_expr (tree e, enum tree_code op, bool complain)
1736 {
1737   if (op == SIZEOF_EXPR)
1738     return cxx_sizeof_expr (e, complain? tf_warning_or_error : tf_none);
1739   else
1740     return cxx_alignof_expr (e, complain? tf_warning_or_error : tf_none);
1741 }
1742 \f
1743 /* EXPR is being used in a context that is not a function call.
1744    Enforce:
1745
1746      [expr.ref]
1747
1748      The expression can be used only as the left-hand operand of a
1749      member function call.
1750
1751      [expr.mptr.operator]
1752
1753      If the result of .* or ->* is a function, then that result can be
1754      used only as the operand for the function call operator ().
1755
1756    by issuing an error message if appropriate.  Returns true iff EXPR
1757    violates these rules.  */
1758
1759 bool
1760 invalid_nonstatic_memfn_p (const_tree expr, tsubst_flags_t complain)
1761 {
1762   if (expr && DECL_NONSTATIC_MEMBER_FUNCTION_P (expr))
1763     {
1764       if (complain & tf_error)
1765         error ("invalid use of non-static member function");
1766       return true;
1767     }
1768   return false;
1769 }
1770
1771 /* If EXP is a reference to a bitfield, and the type of EXP does not
1772    match the declared type of the bitfield, return the declared type
1773    of the bitfield.  Otherwise, return NULL_TREE.  */
1774
1775 tree
1776 is_bitfield_expr_with_lowered_type (const_tree exp)
1777 {
1778   switch (TREE_CODE (exp))
1779     {
1780     case COND_EXPR:
1781       if (!is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1)
1782                                                ? TREE_OPERAND (exp, 1)
1783                                                : TREE_OPERAND (exp, 0)))
1784         return NULL_TREE;
1785       return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 2));
1786
1787     case COMPOUND_EXPR:
1788       return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1));
1789
1790     case MODIFY_EXPR:
1791     case SAVE_EXPR:
1792       return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
1793
1794     case COMPONENT_REF:
1795       {
1796         tree field;
1797         
1798         field = TREE_OPERAND (exp, 1);
1799         if (TREE_CODE (field) != FIELD_DECL || !DECL_BIT_FIELD_TYPE (field))
1800           return NULL_TREE;
1801         if (same_type_ignoring_top_level_qualifiers_p
1802             (TREE_TYPE (exp), DECL_BIT_FIELD_TYPE (field)))
1803           return NULL_TREE;
1804         return DECL_BIT_FIELD_TYPE (field);
1805       }
1806
1807     CASE_CONVERT:
1808       if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (exp, 0)))
1809           == TYPE_MAIN_VARIANT (TREE_TYPE (exp)))
1810         return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
1811       /* Fallthrough.  */
1812
1813     default:
1814       return NULL_TREE;
1815     }
1816 }
1817
1818 /* Like is_bitfield_with_lowered_type, except that if EXP is not a
1819    bitfield with a lowered type, the type of EXP is returned, rather
1820    than NULL_TREE.  */
1821
1822 tree
1823 unlowered_expr_type (const_tree exp)
1824 {
1825   tree type;
1826
1827   type = is_bitfield_expr_with_lowered_type (exp);
1828   if (!type)
1829     type = TREE_TYPE (exp);
1830
1831   return type;
1832 }
1833
1834 /* Perform the conversions in [expr] that apply when an lvalue appears
1835    in an rvalue context: the lvalue-to-rvalue, array-to-pointer, and
1836    function-to-pointer conversions.  In addition, manifest constants
1837    are replaced by their values, and bitfield references are converted
1838    to their declared types.
1839
1840    Although the returned value is being used as an rvalue, this
1841    function does not wrap the returned expression in a
1842    NON_LVALUE_EXPR; the caller is expected to be mindful of the fact
1843    that the return value is no longer an lvalue.  */
1844
1845 tree
1846 decay_conversion (tree exp)
1847 {
1848   tree type;
1849   enum tree_code code;
1850
1851   type = TREE_TYPE (exp);
1852   if (type == error_mark_node)
1853     return error_mark_node;
1854
1855   exp = resolve_nondeduced_context (exp);
1856   if (type_unknown_p (exp))
1857     {
1858       cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1859       return error_mark_node;
1860     }
1861
1862   exp = decl_constant_value (exp);
1863   if (error_operand_p (exp))
1864     return error_mark_node;
1865
1866   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1867      Leave such NOP_EXPRs, since RHS is being used in non-lvalue context.  */
1868   code = TREE_CODE (type);
1869   if (code == VOID_TYPE)
1870     {
1871       error ("void value not ignored as it ought to be");
1872       return error_mark_node;
1873     }
1874   if (invalid_nonstatic_memfn_p (exp, tf_warning_or_error))
1875     return error_mark_node;
1876   if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1877     return cp_build_unary_op (ADDR_EXPR, exp, 0, tf_warning_or_error);
1878   if (code == ARRAY_TYPE)
1879     {
1880       tree adr;
1881       tree ptrtype;
1882
1883       if (TREE_CODE (exp) == INDIRECT_REF)
1884         return build_nop (build_pointer_type (TREE_TYPE (type)),
1885                           TREE_OPERAND (exp, 0));
1886
1887       if (TREE_CODE (exp) == COMPOUND_EXPR)
1888         {
1889           tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1890           return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
1891                          TREE_OPERAND (exp, 0), op1);
1892         }
1893
1894       if (!lvalue_p (exp)
1895           && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1896         {
1897           error ("invalid use of non-lvalue array");
1898           return error_mark_node;
1899         }
1900
1901       ptrtype = build_pointer_type (TREE_TYPE (type));
1902
1903       if (TREE_CODE (exp) == VAR_DECL)
1904         {
1905           if (!cxx_mark_addressable (exp))
1906             return error_mark_node;
1907           adr = build_nop (ptrtype, build_address (exp));
1908           return adr;
1909         }
1910       /* This way is better for a COMPONENT_REF since it can
1911          simplify the offset for a component.  */
1912       adr = cp_build_unary_op (ADDR_EXPR, exp, 1, tf_warning_or_error);
1913       return cp_convert (ptrtype, adr);
1914     }
1915
1916   /* If a bitfield is used in a context where integral promotion
1917      applies, then the caller is expected to have used
1918      default_conversion.  That function promotes bitfields correctly
1919      before calling this function.  At this point, if we have a
1920      bitfield referenced, we may assume that is not subject to
1921      promotion, and that, therefore, the type of the resulting rvalue
1922      is the declared type of the bitfield.  */
1923   exp = convert_bitfield_to_declared_type (exp);
1924
1925   /* We do not call rvalue() here because we do not want to wrap EXP
1926      in a NON_LVALUE_EXPR.  */
1927
1928   /* [basic.lval]
1929
1930      Non-class rvalues always have cv-unqualified types.  */
1931   type = TREE_TYPE (exp);
1932   if (!CLASS_TYPE_P (type) && cv_qualified_p (type))
1933     exp = build_nop (cv_unqualified (type), exp);
1934
1935   return exp;
1936 }
1937
1938 /* Perform preparatory conversions, as part of the "usual arithmetic
1939    conversions".  In particular, as per [expr]:
1940
1941      Whenever an lvalue expression appears as an operand of an
1942      operator that expects the rvalue for that operand, the
1943      lvalue-to-rvalue, array-to-pointer, or function-to-pointer
1944      standard conversions are applied to convert the expression to an
1945      rvalue.
1946
1947    In addition, we perform integral promotions here, as those are
1948    applied to both operands to a binary operator before determining
1949    what additional conversions should apply.  */
1950
1951 tree
1952 default_conversion (tree exp)
1953 {
1954   /* Check for target-specific promotions.  */
1955   tree promoted_type = targetm.promoted_type (TREE_TYPE (exp));
1956   if (promoted_type)
1957     exp = cp_convert (promoted_type, exp);
1958   /* Perform the integral promotions first so that bitfield
1959      expressions (which may promote to "int", even if the bitfield is
1960      declared "unsigned") are promoted correctly.  */
1961   else if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
1962     exp = perform_integral_promotions (exp);
1963   /* Perform the other conversions.  */
1964   exp = decay_conversion (exp);
1965
1966   return exp;
1967 }
1968
1969 /* EXPR is an expression with an integral or enumeration type.
1970    Perform the integral promotions in [conv.prom], and return the
1971    converted value.  */
1972
1973 tree
1974 perform_integral_promotions (tree expr)
1975 {
1976   tree type;
1977   tree promoted_type;
1978
1979   /* [conv.prom]
1980
1981      If the bitfield has an enumerated type, it is treated as any
1982      other value of that type for promotion purposes.  */
1983   type = is_bitfield_expr_with_lowered_type (expr);
1984   if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
1985     type = TREE_TYPE (expr);
1986   gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
1987   promoted_type = type_promotes_to (type);
1988   if (type != promoted_type)
1989     expr = cp_convert (promoted_type, expr);
1990   return expr;
1991 }
1992
1993 /* Returns nonzero iff exp is a STRING_CST or the result of applying
1994    decay_conversion to one.  */
1995
1996 int
1997 string_conv_p (const_tree totype, const_tree exp, int warn)
1998 {
1999   tree t;
2000
2001   if (TREE_CODE (totype) != POINTER_TYPE)
2002     return 0;
2003
2004   t = TREE_TYPE (totype);
2005   if (!same_type_p (t, char_type_node)
2006       && !same_type_p (t, char16_type_node)
2007       && !same_type_p (t, char32_type_node)
2008       && !same_type_p (t, wchar_type_node))
2009     return 0;
2010
2011   if (TREE_CODE (exp) == STRING_CST)
2012     {
2013       /* Make sure that we don't try to convert between char and wide chars.  */
2014       if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
2015         return 0;
2016     }
2017   else
2018     {
2019       /* Is this a string constant which has decayed to 'const char *'?  */
2020       t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
2021       if (!same_type_p (TREE_TYPE (exp), t))
2022         return 0;
2023       STRIP_NOPS (exp);
2024       if (TREE_CODE (exp) != ADDR_EXPR
2025           || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
2026         return 0;
2027     }
2028
2029   /* This warning is not very useful, as it complains about printf.  */
2030   if (warn)
2031     warning (OPT_Wwrite_strings,
2032              "deprecated conversion from string constant to %qT",
2033              totype);
2034
2035   return 1;
2036 }
2037
2038 /* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
2039    can, for example, use as an lvalue.  This code used to be in
2040    unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
2041    expressions, where we're dealing with aggregates.  But now it's again only
2042    called from unary_complex_lvalue.  The case (in particular) that led to
2043    this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
2044    get it there.  */
2045
2046 static tree
2047 rationalize_conditional_expr (enum tree_code code, tree t,
2048                               tsubst_flags_t complain)
2049 {
2050   /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
2051      the first operand is always the one to be used if both operands
2052      are equal, so we know what conditional expression this used to be.  */
2053   if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
2054     {
2055       tree op0 = TREE_OPERAND (t, 0);
2056       tree op1 = TREE_OPERAND (t, 1);
2057
2058       /* The following code is incorrect if either operand side-effects.  */
2059       gcc_assert (!TREE_SIDE_EFFECTS (op0)
2060                   && !TREE_SIDE_EFFECTS (op1));
2061       return
2062         build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
2063                                                     ? LE_EXPR : GE_EXPR),
2064                                                    op0, TREE_CODE (op0),
2065                                                    op1, TREE_CODE (op1),
2066                                                    /*overloaded_p=*/NULL,
2067                                                    complain),
2068                                 cp_build_unary_op (code, op0, 0, complain),
2069                                 cp_build_unary_op (code, op1, 0, complain),
2070                                 complain);
2071     }
2072
2073   return
2074     build_conditional_expr (TREE_OPERAND (t, 0),
2075                             cp_build_unary_op (code, TREE_OPERAND (t, 1), 0,
2076                                                complain),
2077                             cp_build_unary_op (code, TREE_OPERAND (t, 2), 0,
2078                                                complain),
2079                             complain);
2080 }
2081
2082 /* Given the TYPE of an anonymous union field inside T, return the
2083    FIELD_DECL for the field.  If not found return NULL_TREE.  Because
2084    anonymous unions can nest, we must also search all anonymous unions
2085    that are directly reachable.  */
2086
2087 tree
2088 lookup_anon_field (tree t, tree type)
2089 {
2090   tree field;
2091
2092   for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
2093     {
2094       if (TREE_STATIC (field))
2095         continue;
2096       if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
2097         continue;
2098
2099       /* If we find it directly, return the field.  */
2100       if (DECL_NAME (field) == NULL_TREE
2101           && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
2102         {
2103           return field;
2104         }
2105
2106       /* Otherwise, it could be nested, search harder.  */
2107       if (DECL_NAME (field) == NULL_TREE
2108           && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2109         {
2110           tree subfield = lookup_anon_field (TREE_TYPE (field), type);
2111           if (subfield)
2112             return subfield;
2113         }
2114     }
2115   return NULL_TREE;
2116 }
2117
2118 /* Build an expression representing OBJECT.MEMBER.  OBJECT is an
2119    expression; MEMBER is a DECL or baselink.  If ACCESS_PATH is
2120    non-NULL, it indicates the path to the base used to name MEMBER.
2121    If PRESERVE_REFERENCE is true, the expression returned will have
2122    REFERENCE_TYPE if the MEMBER does.  Otherwise, the expression
2123    returned will have the type referred to by the reference.
2124
2125    This function does not perform access control; that is either done
2126    earlier by the parser when the name of MEMBER is resolved to MEMBER
2127    itself, or later when overload resolution selects one of the
2128    functions indicated by MEMBER.  */
2129
2130 tree
2131 build_class_member_access_expr (tree object, tree member,
2132                                 tree access_path, bool preserve_reference,
2133                                 tsubst_flags_t complain)
2134 {
2135   tree object_type;
2136   tree member_scope;
2137   tree result = NULL_TREE;
2138
2139   if (error_operand_p (object) || error_operand_p (member))
2140     return error_mark_node;
2141
2142   gcc_assert (DECL_P (member) || BASELINK_P (member));
2143
2144   /* [expr.ref]
2145
2146      The type of the first expression shall be "class object" (of a
2147      complete type).  */
2148   object_type = TREE_TYPE (object);
2149   if (!currently_open_class (object_type)
2150       && !complete_type_or_else (object_type, object))
2151     return error_mark_node;
2152   if (!CLASS_TYPE_P (object_type))
2153     {
2154       if (complain & tf_error)
2155         error ("request for member %qD in %qE, which is of non-class type %qT",
2156                member, object, object_type);
2157       return error_mark_node;
2158     }
2159
2160   /* The standard does not seem to actually say that MEMBER must be a
2161      member of OBJECT_TYPE.  However, that is clearly what is
2162      intended.  */
2163   if (DECL_P (member))
2164     {
2165       member_scope = DECL_CLASS_CONTEXT (member);
2166       mark_used (member);
2167       if (TREE_DEPRECATED (member))
2168         warn_deprecated_use (member, NULL_TREE);
2169     }
2170   else
2171     member_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (member));
2172   /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
2173      presently be the anonymous union.  Go outwards until we find a
2174      type related to OBJECT_TYPE.  */
2175   while (ANON_AGGR_TYPE_P (member_scope)
2176          && !same_type_ignoring_top_level_qualifiers_p (member_scope,
2177                                                         object_type))
2178     member_scope = TYPE_CONTEXT (member_scope);
2179   if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
2180     {
2181       if (complain & tf_error)
2182         {
2183           if (TREE_CODE (member) == FIELD_DECL)
2184             error ("invalid use of nonstatic data member %qE", member);
2185           else
2186             error ("%qD is not a member of %qT", member, object_type);
2187         }
2188       return error_mark_node;
2189     }
2190
2191   /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into
2192      `(*(a ?  &b : &c)).x', and so on.  A COND_EXPR is only an lvalue
2193      in the front end; only _DECLs and _REFs are lvalues in the back end.  */
2194   {
2195     tree temp = unary_complex_lvalue (ADDR_EXPR, object);
2196     if (temp)
2197       object = cp_build_indirect_ref (temp, RO_NULL, complain);
2198   }
2199
2200   /* In [expr.ref], there is an explicit list of the valid choices for
2201      MEMBER.  We check for each of those cases here.  */
2202   if (TREE_CODE (member) == VAR_DECL)
2203     {
2204       /* A static data member.  */
2205       result = member;
2206       /* If OBJECT has side-effects, they are supposed to occur.  */
2207       if (TREE_SIDE_EFFECTS (object))
2208         result = build2 (COMPOUND_EXPR, TREE_TYPE (result), object, result);
2209     }
2210   else if (TREE_CODE (member) == FIELD_DECL)
2211     {
2212       /* A non-static data member.  */
2213       bool null_object_p;
2214       int type_quals;
2215       tree member_type;
2216
2217       null_object_p = (TREE_CODE (object) == INDIRECT_REF
2218                        && integer_zerop (TREE_OPERAND (object, 0)));
2219
2220       /* Convert OBJECT to the type of MEMBER.  */
2221       if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
2222                         TYPE_MAIN_VARIANT (member_scope)))
2223         {
2224           tree binfo;
2225           base_kind kind;
2226
2227           binfo = lookup_base (access_path ? access_path : object_type,
2228                                member_scope, ba_unique,  &kind);
2229           if (binfo == error_mark_node)
2230             return error_mark_node;
2231
2232           /* It is invalid to try to get to a virtual base of a
2233              NULL object.  The most common cause is invalid use of
2234              offsetof macro.  */
2235           if (null_object_p && kind == bk_via_virtual)
2236             {
2237               if (complain & tf_error)
2238                 {
2239                   error ("invalid access to non-static data member %qD of "
2240                          "NULL object",
2241                          member);
2242                   error ("(perhaps the %<offsetof%> macro was used incorrectly)");
2243                 }
2244               return error_mark_node;
2245             }
2246
2247           /* Convert to the base.  */
2248           object = build_base_path (PLUS_EXPR, object, binfo,
2249                                     /*nonnull=*/1);
2250           /* If we found the base successfully then we should be able
2251              to convert to it successfully.  */
2252           gcc_assert (object != error_mark_node);
2253         }
2254
2255       /* Complain about other invalid uses of offsetof, even though they will
2256          give the right answer.  Note that we complain whether or not they
2257          actually used the offsetof macro, since there's no way to know at this
2258          point.  So we just give a warning, instead of a pedwarn.  */
2259       /* Do not produce this warning for base class field references, because
2260          we know for a fact that didn't come from offsetof.  This does occur
2261          in various testsuite cases where a null object is passed where a
2262          vtable access is required.  */
2263       if (null_object_p && warn_invalid_offsetof
2264           && CLASSTYPE_NON_STD_LAYOUT (object_type)
2265           && !DECL_FIELD_IS_BASE (member)
2266           && cp_unevaluated_operand == 0
2267           && (complain & tf_warning))
2268         {
2269           warning (OPT_Winvalid_offsetof, 
2270                    "invalid access to non-static data member %qD "
2271                    " of NULL object", member);
2272           warning (OPT_Winvalid_offsetof, 
2273                    "(perhaps the %<offsetof%> macro was used incorrectly)");
2274         }
2275
2276       /* If MEMBER is from an anonymous aggregate, we have converted
2277          OBJECT so that it refers to the class containing the
2278          anonymous union.  Generate a reference to the anonymous union
2279          itself, and recur to find MEMBER.  */
2280       if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member))
2281           /* When this code is called from build_field_call, the
2282              object already has the type of the anonymous union.
2283              That is because the COMPONENT_REF was already
2284              constructed, and was then disassembled before calling
2285              build_field_call.  After the function-call code is
2286              cleaned up, this waste can be eliminated.  */
2287           && (!same_type_ignoring_top_level_qualifiers_p
2288               (TREE_TYPE (object), DECL_CONTEXT (member))))
2289         {
2290           tree anonymous_union;
2291
2292           anonymous_union = lookup_anon_field (TREE_TYPE (object),
2293                                                DECL_CONTEXT (member));
2294           object = build_class_member_access_expr (object,
2295                                                    anonymous_union,
2296                                                    /*access_path=*/NULL_TREE,
2297                                                    preserve_reference,
2298                                                    complain);
2299         }
2300
2301       /* Compute the type of the field, as described in [expr.ref].  */
2302       type_quals = TYPE_UNQUALIFIED;
2303       member_type = TREE_TYPE (member);
2304       if (TREE_CODE (member_type) != REFERENCE_TYPE)
2305         {
2306           type_quals = (cp_type_quals (member_type)
2307                         | cp_type_quals (object_type));
2308
2309           /* A field is const (volatile) if the enclosing object, or the
2310              field itself, is const (volatile).  But, a mutable field is
2311              not const, even within a const object.  */
2312           if (DECL_MUTABLE_P (member))
2313             type_quals &= ~TYPE_QUAL_CONST;
2314           member_type = cp_build_qualified_type (member_type, type_quals);
2315         }
2316
2317       result = build3 (COMPONENT_REF, member_type, object, member,
2318                        NULL_TREE);
2319       result = fold_if_not_in_template (result);
2320
2321       /* Mark the expression const or volatile, as appropriate.  Even
2322          though we've dealt with the type above, we still have to mark the
2323          expression itself.  */
2324       if (type_quals & TYPE_QUAL_CONST)
2325         TREE_READONLY (result) = 1;
2326       if (type_quals & TYPE_QUAL_VOLATILE)
2327         TREE_THIS_VOLATILE (result) = 1;
2328     }
2329   else if (BASELINK_P (member))
2330     {
2331       /* The member is a (possibly overloaded) member function.  */
2332       tree functions;
2333       tree type;
2334
2335       /* If the MEMBER is exactly one static member function, then we
2336          know the type of the expression.  Otherwise, we must wait
2337          until overload resolution has been performed.  */
2338       functions = BASELINK_FUNCTIONS (member);
2339       if (TREE_CODE (functions) == FUNCTION_DECL
2340           && DECL_STATIC_FUNCTION_P (functions))
2341         type = TREE_TYPE (functions);
2342       else
2343         type = unknown_type_node;
2344       /* Note that we do not convert OBJECT to the BASELINK_BINFO
2345          base.  That will happen when the function is called.  */
2346       result = build3 (COMPONENT_REF, type, object, member, NULL_TREE);
2347     }
2348   else if (TREE_CODE (member) == CONST_DECL)
2349     {
2350       /* The member is an enumerator.  */
2351       result = member;
2352       /* If OBJECT has side-effects, they are supposed to occur.  */
2353       if (TREE_SIDE_EFFECTS (object))
2354         result = build2 (COMPOUND_EXPR, TREE_TYPE (result),
2355                          object, result);
2356     }
2357   else
2358     {
2359       if (complain & tf_error)
2360         error ("invalid use of %qD", member);
2361       return error_mark_node;
2362     }
2363
2364   if (!preserve_reference)
2365     /* [expr.ref]
2366
2367        If E2 is declared to have type "reference to T", then ... the
2368        type of E1.E2 is T.  */
2369     result = convert_from_reference (result);
2370
2371   return result;
2372 }
2373
2374 /* Return the destructor denoted by OBJECT.SCOPE::DTOR_NAME, or, if
2375    SCOPE is NULL, by OBJECT.DTOR_NAME, where DTOR_NAME is ~type.  */
2376
2377 static tree
2378 lookup_destructor (tree object, tree scope, tree dtor_name)
2379 {
2380   tree object_type = TREE_TYPE (object);
2381   tree dtor_type = TREE_OPERAND (dtor_name, 0);
2382   tree expr;
2383
2384   if (scope && !check_dtor_name (scope, dtor_type))
2385     {
2386       error ("qualified type %qT does not match destructor name ~%qT",
2387              scope, dtor_type);
2388       return error_mark_node;
2389     }
2390   if (TREE_CODE (dtor_type) == IDENTIFIER_NODE)
2391     {
2392       /* In a template, names we can't find a match for are still accepted
2393          destructor names, and we check them here.  */
2394       if (check_dtor_name (object_type, dtor_type))
2395         dtor_type = object_type;
2396       else
2397         {
2398           error ("object type %qT does not match destructor name ~%qT",
2399                  object_type, dtor_type);
2400           return error_mark_node;
2401         }
2402       
2403     }
2404   else if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type)))
2405     {
2406       error ("the type being destroyed is %qT, but the destructor refers to %qT",
2407              TYPE_MAIN_VARIANT (object_type), dtor_type);
2408       return error_mark_node;
2409     }
2410   expr = lookup_member (dtor_type, complete_dtor_identifier,
2411                         /*protect=*/1, /*want_type=*/false);
2412   expr = (adjust_result_of_qualified_name_lookup
2413           (expr, dtor_type, object_type));
2414   return expr;
2415 }
2416
2417 /* An expression of the form "A::template B" has been resolved to
2418    DECL.  Issue a diagnostic if B is not a template or template
2419    specialization.  */
2420
2421 void
2422 check_template_keyword (tree decl)
2423 {
2424   /* The standard says:
2425
2426       [temp.names]
2427
2428       If a name prefixed by the keyword template is not a member
2429       template, the program is ill-formed.
2430
2431      DR 228 removed the restriction that the template be a member
2432      template.
2433
2434      DR 96, if accepted would add the further restriction that explicit
2435      template arguments must be provided if the template keyword is
2436      used, but, as of 2005-10-16, that DR is still in "drafting".  If
2437      this DR is accepted, then the semantic checks here can be
2438      simplified, as the entity named must in fact be a template
2439      specialization, rather than, as at present, a set of overloaded
2440      functions containing at least one template function.  */
2441   if (TREE_CODE (decl) != TEMPLATE_DECL
2442       && TREE_CODE (decl) != TEMPLATE_ID_EXPR)
2443     {
2444       if (!is_overloaded_fn (decl))
2445         permerror (input_location, "%qD is not a template", decl);
2446       else
2447         {
2448           tree fns;
2449           fns = decl;
2450           if (BASELINK_P (fns))
2451             fns = BASELINK_FUNCTIONS (fns);
2452           while (fns)
2453             {
2454               tree fn = OVL_CURRENT (fns);
2455               if (TREE_CODE (fn) == TEMPLATE_DECL
2456                   || TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2457                 break;
2458               if (TREE_CODE (fn) == FUNCTION_DECL
2459                   && DECL_USE_TEMPLATE (fn)
2460                   && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
2461                 break;
2462               fns = OVL_NEXT (fns);
2463             }
2464           if (!fns)
2465             permerror (input_location, "%qD is not a template", decl);
2466         }
2467     }
2468 }
2469
2470 /* This function is called by the parser to process a class member
2471    access expression of the form OBJECT.NAME.  NAME is a node used by
2472    the parser to represent a name; it is not yet a DECL.  It may,
2473    however, be a BASELINK where the BASELINK_FUNCTIONS is a
2474    TEMPLATE_ID_EXPR.  Templates must be looked up by the parser, and
2475    there is no reason to do the lookup twice, so the parser keeps the
2476    BASELINK.  TEMPLATE_P is true iff NAME was explicitly declared to
2477    be a template via the use of the "A::template B" syntax.  */
2478
2479 tree
2480 finish_class_member_access_expr (tree object, tree name, bool template_p,
2481                                  tsubst_flags_t complain)
2482 {
2483   tree expr;
2484   tree object_type;
2485   tree member;
2486   tree access_path = NULL_TREE;
2487   tree orig_object = object;
2488   tree orig_name = name;
2489
2490   if (object == error_mark_node || name == error_mark_node)
2491     return error_mark_node;
2492
2493   /* If OBJECT is an ObjC class instance, we must obey ObjC access rules.  */
2494   if (!objc_is_public (object, name))
2495     return error_mark_node;
2496
2497   object_type = TREE_TYPE (object);
2498
2499   if (processing_template_decl)
2500     {
2501       if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME.  */
2502           dependent_type_p (object_type)
2503           /* If NAME is just an IDENTIFIER_NODE, then the expression
2504              is dependent.  */
2505           || TREE_CODE (object) == IDENTIFIER_NODE
2506           /* If NAME is "f<args>", where either 'f' or 'args' is
2507              dependent, then the expression is dependent.  */
2508           || (TREE_CODE (name) == TEMPLATE_ID_EXPR
2509               && dependent_template_id_p (TREE_OPERAND (name, 0),
2510                                           TREE_OPERAND (name, 1)))
2511           /* If NAME is "T::X" where "T" is dependent, then the
2512              expression is dependent.  */
2513           || (TREE_CODE (name) == SCOPE_REF
2514               && TYPE_P (TREE_OPERAND (name, 0))
2515               && dependent_type_p (TREE_OPERAND (name, 0))))
2516         return build_min_nt (COMPONENT_REF, object, name, NULL_TREE);
2517       object = build_non_dependent_expr (object);
2518     }
2519
2520   /* [expr.ref]
2521
2522      The type of the first expression shall be "class object" (of a
2523      complete type).  */
2524   if (!currently_open_class (object_type)
2525       && !complete_type_or_else (object_type, object))
2526     return error_mark_node;
2527   if (!CLASS_TYPE_P (object_type))
2528     {
2529       if (complain & tf_error)
2530         error ("request for member %qD in %qE, which is of non-class type %qT",
2531                name, object, object_type);
2532       return error_mark_node;
2533     }
2534
2535   if (BASELINK_P (name))
2536     /* A member function that has already been looked up.  */
2537     member = name;
2538   else
2539     {
2540       bool is_template_id = false;
2541       tree template_args = NULL_TREE;
2542       tree scope;
2543
2544       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2545         {
2546           is_template_id = true;
2547           template_args = TREE_OPERAND (name, 1);
2548           name = TREE_OPERAND (name, 0);
2549
2550           if (TREE_CODE (name) == OVERLOAD)
2551             name = DECL_NAME (get_first_fn (name));
2552           else if (DECL_P (name))
2553             name = DECL_NAME (name);
2554         }
2555
2556       if (TREE_CODE (name) == SCOPE_REF)
2557         {
2558           /* A qualified name.  The qualifying class or namespace `S'
2559              has already been looked up; it is either a TYPE or a
2560              NAMESPACE_DECL.  */
2561           scope = TREE_OPERAND (name, 0);
2562           name = TREE_OPERAND (name, 1);
2563
2564           /* If SCOPE is a namespace, then the qualified name does not
2565              name a member of OBJECT_TYPE.  */
2566           if (TREE_CODE (scope) == NAMESPACE_DECL)
2567             {
2568               if (complain & tf_error)
2569                 error ("%<%D::%D%> is not a member of %qT",
2570                        scope, name, object_type);
2571               return error_mark_node;
2572             }
2573
2574           gcc_assert (CLASS_TYPE_P (scope));
2575           gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE
2576                       || TREE_CODE (name) == BIT_NOT_EXPR);
2577
2578           if (constructor_name_p (name, scope))
2579             {
2580               if (complain & tf_error)
2581                 error ("cannot call constructor %<%T::%D%> directly",
2582                        scope, name);
2583               return error_mark_node;
2584             }
2585
2586           /* Find the base of OBJECT_TYPE corresponding to SCOPE.  */
2587           access_path = lookup_base (object_type, scope, ba_check, NULL);
2588           if (access_path == error_mark_node)
2589             return error_mark_node;
2590           if (!access_path)
2591             {
2592               if (complain & tf_error)
2593                 error ("%qT is not a base of %qT", scope, object_type);
2594               return error_mark_node;
2595             }
2596         }
2597       else
2598         {
2599           scope = NULL_TREE;
2600           access_path = object_type;
2601         }
2602
2603       if (TREE_CODE (name) == BIT_NOT_EXPR)
2604         member = lookup_destructor (object, scope, name);
2605       else
2606         {
2607           /* Look up the member.  */
2608           member = lookup_member (access_path, name, /*protect=*/1,
2609                                   /*want_type=*/false);
2610           if (member == NULL_TREE)
2611             {
2612               if (complain & tf_error)
2613                 error ("%qD has no member named %qE", object_type, name);
2614               return error_mark_node;
2615             }
2616           if (member == error_mark_node)
2617             return error_mark_node;
2618         }
2619
2620       if (is_template_id)
2621         {
2622           tree templ = member;
2623
2624           if (BASELINK_P (templ))
2625             templ = lookup_template_function (templ, template_args);
2626           else
2627             {
2628               if (complain & tf_error)
2629                 error ("%qD is not a member template function", name);
2630               return error_mark_node;
2631             }
2632         }
2633     }
2634
2635   if (TREE_DEPRECATED (member))
2636     warn_deprecated_use (member, NULL_TREE);
2637
2638   if (template_p)
2639     check_template_keyword (member);
2640
2641   expr = build_class_member_access_expr (object, member, access_path,
2642                                          /*preserve_reference=*/false,
2643                                          complain);
2644   if (processing_template_decl && expr != error_mark_node)
2645     {
2646       if (BASELINK_P (member))
2647         {
2648           if (TREE_CODE (orig_name) == SCOPE_REF)
2649             BASELINK_QUALIFIED_P (member) = 1;
2650           orig_name = member;
2651         }
2652       return build_min_non_dep (COMPONENT_REF, expr,
2653                                 orig_object, orig_name,
2654                                 NULL_TREE);
2655     }
2656
2657   return expr;
2658 }
2659
2660 /* Return an expression for the MEMBER_NAME field in the internal
2661    representation of PTRMEM, a pointer-to-member function.  (Each
2662    pointer-to-member function type gets its own RECORD_TYPE so it is
2663    more convenient to access the fields by name than by FIELD_DECL.)
2664    This routine converts the NAME to a FIELD_DECL and then creates the
2665    node for the complete expression.  */
2666
2667 tree
2668 build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
2669 {
2670   tree ptrmem_type;
2671   tree member;
2672   tree member_type;
2673
2674   /* This code is a stripped down version of
2675      build_class_member_access_expr.  It does not work to use that
2676      routine directly because it expects the object to be of class
2677      type.  */
2678   ptrmem_type = TREE_TYPE (ptrmem);
2679   gcc_assert (TYPE_PTRMEMFUNC_P (ptrmem_type));
2680   member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2681                           /*want_type=*/false);
2682   member_type = cp_build_qualified_type (TREE_TYPE (member),
2683                                          cp_type_quals (ptrmem_type));
2684   return fold_build3_loc (input_location,
2685                       COMPONENT_REF, member_type,
2686                       ptrmem, member, NULL_TREE);
2687 }
2688
2689 /* Given an expression PTR for a pointer, return an expression
2690    for the value pointed to.
2691    ERRORSTRING is the name of the operator to appear in error messages.
2692
2693    This function may need to overload OPERATOR_FNNAME.
2694    Must also handle REFERENCE_TYPEs for C++.  */
2695
2696 tree
2697 build_x_indirect_ref (tree expr, ref_operator errorstring, 
2698                       tsubst_flags_t complain)
2699 {
2700   tree orig_expr = expr;
2701   tree rval;
2702
2703   if (processing_template_decl)
2704     {
2705       /* Retain the type if we know the operand is a pointer so that
2706          describable_type doesn't make auto deduction break.  */
2707       if (TREE_TYPE (expr) && POINTER_TYPE_P (TREE_TYPE (expr)))
2708         return build_min (INDIRECT_REF, TREE_TYPE (TREE_TYPE (expr)), expr);
2709       if (type_dependent_expression_p (expr))
2710         return build_min_nt (INDIRECT_REF, expr);
2711       expr = build_non_dependent_expr (expr);
2712     }
2713
2714   rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE,
2715                        NULL_TREE, /*overloaded_p=*/NULL, complain);
2716   if (!rval)
2717     rval = cp_build_indirect_ref (expr, errorstring, complain);
2718
2719   if (processing_template_decl && rval != error_mark_node)
2720     return build_min_non_dep (INDIRECT_REF, rval, orig_expr);
2721   else
2722     return rval;
2723 }
2724
2725 /* Helper function called from c-common.  */
2726 tree
2727 build_indirect_ref (location_t loc __attribute__ ((__unused__)),
2728                     tree ptr, ref_operator errorstring)
2729 {
2730   return cp_build_indirect_ref (ptr, errorstring, tf_warning_or_error);
2731 }
2732
2733 tree
2734 cp_build_indirect_ref (tree ptr, ref_operator errorstring, 
2735                        tsubst_flags_t complain)
2736 {
2737   tree pointer, type;
2738
2739   if (ptr == error_mark_node)
2740     return error_mark_node;
2741
2742   if (ptr == current_class_ptr)
2743     return current_class_ref;
2744
2745   pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2746              ? ptr : decay_conversion (ptr));
2747   type = TREE_TYPE (pointer);
2748
2749   if (POINTER_TYPE_P (type))
2750     {
2751       /* [expr.unary.op]
2752
2753          If the type of the expression is "pointer to T," the type
2754          of  the  result  is  "T."  */
2755       tree t = TREE_TYPE (type);
2756
2757       if (CONVERT_EXPR_P (ptr)
2758           || TREE_CODE (ptr) == VIEW_CONVERT_EXPR)
2759         {
2760           /* If a warning is issued, mark it to avoid duplicates from
2761              the backend.  This only needs to be done at
2762              warn_strict_aliasing > 2.  */
2763           if (warn_strict_aliasing > 2)
2764             if (strict_aliasing_warning (TREE_TYPE (TREE_OPERAND (ptr, 0)),
2765                                          type, TREE_OPERAND (ptr, 0)))
2766               TREE_NO_WARNING (ptr) = 1;
2767         }
2768
2769       if (VOID_TYPE_P (t))
2770         {
2771           /* A pointer to incomplete type (other than cv void) can be
2772              dereferenced [expr.unary.op]/1  */
2773           if (complain & tf_error)
2774             error ("%qT is not a pointer-to-object type", type);
2775           return error_mark_node;
2776         }
2777       else if (TREE_CODE (pointer) == ADDR_EXPR
2778                && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2779         /* The POINTER was something like `&x'.  We simplify `*&x' to
2780            `x'.  */
2781         return TREE_OPERAND (pointer, 0);
2782       else
2783         {
2784           tree ref = build1 (INDIRECT_REF, t, pointer);
2785
2786           /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2787              so that we get the proper error message if the result is used
2788              to assign to.  Also, &* is supposed to be a no-op.  */
2789           TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2790           TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2791           TREE_SIDE_EFFECTS (ref)
2792             = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2793           return ref;
2794         }
2795     }
2796   else if (!(complain & tf_error))
2797     /* Don't emit any errors; we'll just return ERROR_MARK_NODE later.  */
2798     ;
2799   /* `pointer' won't be an error_mark_node if we were given a
2800      pointer to member, so it's cool to check for this here.  */
2801   else if (TYPE_PTR_TO_MEMBER_P (type))
2802     switch (errorstring)
2803       {
2804          case RO_ARRAY_INDEXING:
2805            error ("invalid use of array indexing on pointer to member");
2806            break;
2807          case RO_UNARY_STAR:
2808            error ("invalid use of unary %<*%> on pointer to member");
2809            break;
2810          case RO_IMPLICIT_CONVERSION:
2811            error ("invalid use of implicit conversion on pointer to member");
2812            break;
2813          default:
2814            gcc_unreachable ();
2815       }
2816   else if (pointer != error_mark_node)
2817     switch (errorstring)
2818       {
2819          case RO_NULL:
2820            error ("invalid type argument");
2821            break;
2822          case RO_ARRAY_INDEXING:
2823            error ("invalid type argument of array indexing");
2824            break;
2825          case RO_UNARY_STAR:
2826            error ("invalid type argument of unary %<*%>");
2827            break;
2828          case RO_IMPLICIT_CONVERSION:
2829            error ("invalid type argument of implicit conversion");
2830            break;
2831          default:
2832            gcc_unreachable ();
2833       }
2834   return error_mark_node;
2835 }
2836
2837 /* This handles expressions of the form "a[i]", which denotes
2838    an array reference.
2839
2840    This is logically equivalent in C to *(a+i), but we may do it differently.
2841    If A is a variable or a member, we generate a primitive ARRAY_REF.
2842    This avoids forcing the array out of registers, and can work on
2843    arrays that are not lvalues (for example, members of structures returned
2844    by functions).
2845
2846    If INDEX is of some user-defined type, it must be converted to
2847    integer type.  Otherwise, to make a compatible PLUS_EXPR, it
2848    will inherit the type of the array, which will be some pointer type.
2849    
2850    LOC is the location to use in building the array reference.  */
2851
2852 tree
2853 build_array_ref (location_t loc, tree array, tree idx)
2854 {
2855   tree ret;
2856
2857   if (idx == 0)
2858     {
2859       error_at (loc, "subscript missing in array reference");
2860       return error_mark_node;
2861     }
2862
2863   if (TREE_TYPE (array) == error_mark_node
2864       || TREE_TYPE (idx) == error_mark_node)
2865     return error_mark_node;
2866
2867   /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2868      inside it.  */
2869   switch (TREE_CODE (array))
2870     {
2871     case COMPOUND_EXPR:
2872       {
2873         tree value = build_array_ref (loc, TREE_OPERAND (array, 1), idx);
2874         ret = build2 (COMPOUND_EXPR, TREE_TYPE (value),
2875                       TREE_OPERAND (array, 0), value);
2876         SET_EXPR_LOCATION (ret, loc);
2877         return ret;
2878       }
2879
2880     case COND_EXPR:
2881       ret = build_conditional_expr
2882               (TREE_OPERAND (array, 0),
2883                build_array_ref (loc, TREE_OPERAND (array, 1), idx),
2884                build_array_ref (loc, TREE_OPERAND (array, 2), idx),
2885                tf_warning_or_error);
2886       protected_set_expr_location (ret, loc);
2887       return ret;
2888
2889     default:
2890       break;
2891     }
2892
2893   if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2894     {
2895       tree rval, type;
2896
2897       warn_array_subscript_with_type_char (idx);
2898
2899       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
2900         {
2901           error_at (loc, "array subscript is not an integer");
2902           return error_mark_node;
2903         }
2904
2905       /* Apply integral promotions *after* noticing character types.
2906          (It is unclear why we do these promotions -- the standard
2907          does not say that we should.  In fact, the natural thing would
2908          seem to be to convert IDX to ptrdiff_t; we're performing
2909          pointer arithmetic.)  */
2910       idx = perform_integral_promotions (idx);
2911
2912       /* An array that is indexed by a non-constant
2913          cannot be stored in a register; we must be able to do
2914          address arithmetic on its address.
2915          Likewise an array of elements of variable size.  */
2916       if (TREE_CODE (idx) != INTEGER_CST
2917           || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2918               && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2919                   != INTEGER_CST)))
2920         {
2921           if (!cxx_mark_addressable (array))
2922             return error_mark_node;
2923         }
2924
2925       /* An array that is indexed by a constant value which is not within
2926          the array bounds cannot be stored in a register either; because we
2927          would get a crash in store_bit_field/extract_bit_field when trying
2928          to access a non-existent part of the register.  */
2929       if (TREE_CODE (idx) == INTEGER_CST
2930           && TYPE_DOMAIN (TREE_TYPE (array))
2931           && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array))))
2932         {
2933           if (!cxx_mark_addressable (array))
2934             return error_mark_node;
2935         }
2936
2937       if (!lvalue_p (array))
2938         pedwarn (loc, OPT_pedantic, 
2939                  "ISO C++ forbids subscripting non-lvalue array");
2940
2941       /* Note in C++ it is valid to subscript a `register' array, since
2942          it is valid to take the address of something with that
2943          storage specification.  */
2944       if (extra_warnings)
2945         {
2946           tree foo = array;
2947           while (TREE_CODE (foo) == COMPONENT_REF)
2948             foo = TREE_OPERAND (foo, 0);
2949           if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2950             warning_at (loc, OPT_Wextra,
2951                         "subscripting array declared %<register%>");
2952         }
2953
2954       type = TREE_TYPE (TREE_TYPE (array));
2955       rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE);
2956       /* Array ref is const/volatile if the array elements are
2957          or if the array is..  */
2958       TREE_READONLY (rval)
2959         |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2960       TREE_SIDE_EFFECTS (rval)
2961         |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2962       TREE_THIS_VOLATILE (rval)
2963         |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2964       ret = require_complete_type (fold_if_not_in_template (rval));
2965       protected_set_expr_location (ret, loc);
2966       return ret;
2967     }
2968
2969   {
2970     tree ar = default_conversion (array);
2971     tree ind = default_conversion (idx);
2972
2973     /* Put the integer in IND to simplify error checking.  */
2974     if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2975       {
2976         tree temp = ar;
2977         ar = ind;
2978         ind = temp;
2979       }
2980
2981     if (ar == error_mark_node)
2982       return ar;
2983
2984     if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2985       {
2986         error_at (loc, "subscripted value is neither array nor pointer");
2987         return error_mark_node;
2988       }
2989     if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2990       {
2991         error_at (loc, "array subscript is not an integer");
2992         return error_mark_node;
2993       }
2994
2995     warn_array_subscript_with_type_char (idx);
2996
2997     ret = cp_build_indirect_ref (cp_build_binary_op (input_location,
2998                                                      PLUS_EXPR, ar, ind,
2999                                                      tf_warning_or_error),
3000                                  RO_ARRAY_INDEXING,
3001                                  tf_warning_or_error);
3002     protected_set_expr_location (ret, loc);
3003     return ret;
3004   }
3005 }
3006 \f
3007 /* Resolve a pointer to member function.  INSTANCE is the object
3008    instance to use, if the member points to a virtual member.
3009
3010    This used to avoid checking for virtual functions if basetype
3011    has no virtual functions, according to an earlier ANSI draft.
3012    With the final ISO C++ rules, such an optimization is
3013    incorrect: A pointer to a derived member can be static_cast
3014    to pointer-to-base-member, as long as the dynamic object
3015    later has the right member.  */
3016
3017 tree
3018 get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
3019 {
3020   if (TREE_CODE (function) == OFFSET_REF)
3021     function = TREE_OPERAND (function, 1);
3022
3023   if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
3024     {
3025       tree idx, delta, e1, e2, e3, vtbl, basetype;
3026       tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
3027
3028       tree instance_ptr = *instance_ptrptr;
3029       tree instance_save_expr = 0;
3030       if (instance_ptr == error_mark_node)
3031         {
3032           if (TREE_CODE (function) == PTRMEM_CST)
3033             {
3034               /* Extracting the function address from a pmf is only
3035                  allowed with -Wno-pmf-conversions. It only works for
3036                  pmf constants.  */
3037               e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
3038               e1 = convert (fntype, e1);
3039               return e1;
3040             }
3041           else
3042             {
3043               error ("object missing in use of %qE", function);
3044               return error_mark_node;
3045             }
3046         }
3047
3048       if (TREE_SIDE_EFFECTS (instance_ptr))
3049         instance_ptr = instance_save_expr = save_expr (instance_ptr);
3050
3051       if (TREE_SIDE_EFFECTS (function))
3052         function = save_expr (function);
3053
3054       /* Start by extracting all the information from the PMF itself.  */
3055       e3 = pfn_from_ptrmemfunc (function);
3056       delta = delta_from_ptrmemfunc (function);
3057       idx = build1 (NOP_EXPR, vtable_index_type, e3);
3058       switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
3059         {
3060         case ptrmemfunc_vbit_in_pfn:
3061           e1 = cp_build_binary_op (input_location,
3062                                    BIT_AND_EXPR, idx, integer_one_node,
3063                                    tf_warning_or_error);
3064           idx = cp_build_binary_op (input_location,
3065                                     MINUS_EXPR, idx, integer_one_node,
3066                                     tf_warning_or_error);
3067           break;
3068
3069         case ptrmemfunc_vbit_in_delta:
3070           e1 = cp_build_binary_op (input_location,
3071                                    BIT_AND_EXPR, delta, integer_one_node,
3072                                    tf_warning_or_error);
3073           delta = cp_build_binary_op (input_location,
3074                                       RSHIFT_EXPR, delta, integer_one_node,
3075                                       tf_warning_or_error);
3076           break;
3077
3078         default:
3079           gcc_unreachable ();
3080         }
3081
3082       /* Convert down to the right base before using the instance.  A
3083          special case is that in a pointer to member of class C, C may
3084          be incomplete.  In that case, the function will of course be
3085          a member of C, and no conversion is required.  In fact,
3086          lookup_base will fail in that case, because incomplete
3087          classes do not have BINFOs.  */
3088       basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
3089       if (!same_type_ignoring_top_level_qualifiers_p
3090           (basetype, TREE_TYPE (TREE_TYPE (instance_ptr))))
3091         {
3092           basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
3093                                   basetype, ba_check, NULL);
3094           instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype,
3095                                           1);
3096           if (instance_ptr == error_mark_node)
3097             return error_mark_node;
3098         }
3099       /* ...and then the delta in the PMF.  */
3100       instance_ptr = build2 (POINTER_PLUS_EXPR, TREE_TYPE (instance_ptr),
3101                              instance_ptr, fold_convert (sizetype, delta));
3102
3103       /* Hand back the adjusted 'this' argument to our caller.  */
3104       *instance_ptrptr = instance_ptr;
3105
3106       /* Next extract the vtable pointer from the object.  */
3107       vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
3108                      instance_ptr);
3109       vtbl = cp_build_indirect_ref (vtbl, RO_NULL, tf_warning_or_error);
3110       /* If the object is not dynamic the access invokes undefined
3111          behavior.  As it is not executed in this case silence the
3112          spurious warnings it may provoke.  */
3113       TREE_NO_WARNING (vtbl) = 1;
3114
3115       /* Finally, extract the function pointer from the vtable.  */
3116       e2 = fold_build2_loc (input_location,
3117                         POINTER_PLUS_EXPR, TREE_TYPE (vtbl), vtbl,
3118                         fold_convert (sizetype, idx));
3119       e2 = cp_build_indirect_ref (e2, RO_NULL, tf_warning_or_error);
3120       TREE_CONSTANT (e2) = 1;
3121
3122       /* When using function descriptors, the address of the
3123          vtable entry is treated as a function pointer.  */
3124       if (TARGET_VTABLE_USES_DESCRIPTORS)
3125         e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
3126                      cp_build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1,
3127                                      tf_warning_or_error));
3128
3129       e2 = fold_convert (TREE_TYPE (e3), e2);
3130       e1 = build_conditional_expr (e1, e2, e3, tf_warning_or_error);
3131
3132       /* Make sure this doesn't get evaluated first inside one of the
3133          branches of the COND_EXPR.  */
3134       if (instance_save_expr)
3135         e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1),
3136                      instance_save_expr, e1);
3137
3138       function = e1;
3139     }
3140   return function;
3141 }
3142
3143 /* Used by the C-common bits.  */
3144 tree
3145 build_function_call (location_t loc ATTRIBUTE_UNUSED, 
3146                      tree function, tree params)
3147 {
3148   return cp_build_function_call (function, params, tf_warning_or_error);
3149 }
3150
3151 /* Used by the C-common bits.  */
3152 tree
3153 build_function_call_vec (location_t loc ATTRIBUTE_UNUSED,
3154                          tree function, VEC(tree,gc) *params,
3155                          VEC(tree,gc) *origtypes ATTRIBUTE_UNUSED)
3156 {
3157   VEC(tree,gc) *orig_params = params;
3158   tree ret = cp_build_function_call_vec (function, &params,
3159                                          tf_warning_or_error);
3160
3161   /* cp_build_function_call_vec can reallocate PARAMS by adding
3162      default arguments.  That should never happen here.  Verify
3163      that.  */
3164   gcc_assert (params == orig_params);
3165
3166   return ret;
3167 }
3168
3169 /* Build a function call using a tree list of arguments.  */
3170
3171 tree
3172 cp_build_function_call (tree function, tree params, tsubst_flags_t complain)
3173 {
3174   VEC(tree,gc) *vec;
3175   tree ret;
3176
3177   vec = make_tree_vector ();
3178   for (; params != NULL_TREE; params = TREE_CHAIN (params))
3179     VEC_safe_push (tree, gc, vec, TREE_VALUE (params));
3180   ret = cp_build_function_call_vec (function, &vec, complain);
3181   release_tree_vector (vec);
3182   return ret;
3183 }
3184
3185 /* Build a function call using a vector of arguments.  PARAMS may be
3186    NULL if there are no parameters.  This changes the contents of
3187    PARAMS.  */
3188
3189 tree
3190 cp_build_function_call_vec (tree function, VEC(tree,gc) **params,
3191                             tsubst_flags_t complain)
3192 {
3193   tree fntype, fndecl;
3194   int is_method;
3195   tree original = function;
3196   int nargs;
3197   tree *argarray;
3198   tree parm_types;
3199   VEC(tree,gc) *allocated = NULL;
3200   tree ret;
3201
3202   /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
3203      expressions, like those used for ObjC messenger dispatches.  */
3204   if (params != NULL && !VEC_empty (tree, *params))
3205     function = objc_rewrite_function_call (function,
3206                                            VEC_index (tree, *params, 0));
3207
3208   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
3209      Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context.  */
3210   if (TREE_CODE (function) == NOP_EXPR
3211       && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
3212     function = TREE_OPERAND (function, 0);
3213
3214   if (TREE_CODE (function) == FUNCTION_DECL)
3215     {
3216       mark_used (function);
3217       fndecl = function;
3218
3219       /* Convert anything with function type to a pointer-to-function.  */
3220       if (DECL_MAIN_P (function) && (complain & tf_error))
3221         pedwarn (input_location, OPT_pedantic, 
3222                  "ISO C++ forbids calling %<::main%> from within program");
3223
3224       function = build_addr_func (function);
3225     }
3226   else
3227     {
3228       fndecl = NULL_TREE;
3229
3230       function = build_addr_func (function);
3231     }
3232
3233   if (function == error_mark_node)
3234     return error_mark_node;
3235
3236   fntype = TREE_TYPE (function);
3237
3238   if (TYPE_PTRMEMFUNC_P (fntype))
3239     {
3240       if (complain & tf_error)
3241         error ("must use %<.*%> or %<->*%> to call pointer-to-member "
3242                "function in %<%E (...)%>, e.g. %<(... ->* %E) (...)%>",
3243                original, original);
3244       return error_mark_node;
3245     }
3246
3247   is_method = (TREE_CODE (fntype) == POINTER_TYPE
3248                && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
3249
3250   if (!((TREE_CODE (fntype) == POINTER_TYPE
3251          && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
3252         || is_method
3253         || TREE_CODE (function) == TEMPLATE_ID_EXPR))
3254     {
3255       if (complain & tf_error)
3256         error ("%qE cannot be used as a function", original);
3257       return error_mark_node;
3258     }
3259
3260   /* fntype now gets the type of function pointed to.  */
3261   fntype = TREE_TYPE (fntype);
3262   parm_types = TYPE_ARG_TYPES (fntype);
3263
3264   if (params == NULL)
3265     {
3266       allocated = make_tree_vector ();
3267       params = &allocated;
3268     }
3269
3270   nargs = convert_arguments (parm_types, params, fndecl, LOOKUP_NORMAL,
3271                              complain);
3272   if (nargs < 0)
3273     return error_mark_node;
3274
3275   argarray = VEC_address (tree, *params);
3276
3277   /* Check for errors in format strings and inappropriately
3278      null parameters.  */
3279   check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray,
3280                             parm_types);
3281
3282   ret = build_cxx_call (function, nargs, argarray);
3283
3284   if (allocated != NULL)
3285     release_tree_vector (allocated);
3286
3287   return ret;
3288 }
3289 \f
3290 /* Subroutine of convert_arguments.
3291    Warn about wrong number of args are genereted. */
3292
3293 static void
3294 warn_args_num (location_t loc, tree fndecl, bool too_many_p)
3295 {
3296   if (fndecl)
3297     {
3298       if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
3299         {
3300           if (DECL_NAME (fndecl) == NULL_TREE
3301               || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
3302             error_at (loc,
3303                       too_many_p
3304                       ? G_("too many arguments to constructor %q#D")
3305                       : G_("too few arguments to constructor %q#D"),
3306                       fndecl);
3307           else
3308             error_at (loc,
3309                       too_many_p
3310                       ? G_("too many arguments to member function %q#D")
3311                       : G_("too few arguments to member function %q#D"),
3312                       fndecl);
3313         }
3314       else
3315         error_at (loc,
3316                   too_many_p
3317                   ? G_("too many arguments to function %q#D")
3318                   : G_("too few arguments to function %q#D"),
3319                   fndecl);
3320       inform (DECL_SOURCE_LOCATION (fndecl),
3321               "declared here");
3322     }
3323   else
3324     error_at (loc, too_many_p ? G_("too many arguments to function")
3325                               : G_("too few arguments to function"));
3326 }
3327
3328 /* Convert the actual parameter expressions in the list VALUES to the
3329    types in the list TYPELIST.  The converted expressions are stored
3330    back in the VALUES vector.
3331    If parmdecls is exhausted, or when an element has NULL as its type,
3332    perform the default conversions.
3333
3334    NAME is an IDENTIFIER_NODE or 0.  It is used only for error messages.
3335
3336    This is also where warnings about wrong number of args are generated.
3337
3338    Returns the actual number of arguments processed (which might be less
3339    than the length of the vector), or -1 on error.
3340
3341    In C++, unspecified trailing parameters can be filled in with their
3342    default arguments, if such were specified.  Do so here.  */
3343
3344 static int
3345 convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl,
3346                    int flags, tsubst_flags_t complain)
3347 {
3348   tree typetail;
3349   unsigned int i;
3350
3351   /* Argument passing is always copy-initialization.  */
3352   flags |= LOOKUP_ONLYCONVERTING;
3353
3354   for (i = 0, typetail = typelist;
3355        i < VEC_length (tree, *values);
3356        i++)
3357     {
3358       tree type = typetail ? TREE_VALUE (typetail) : 0;
3359       tree val = VEC_index (tree, *values, i);
3360
3361       if (val == error_mark_node || type == error_mark_node)
3362         return -1;
3363
3364       if (type == void_type_node)
3365         {
3366           if (complain & tf_error)
3367             {
3368               warn_args_num (input_location, fndecl, /*too_many_p=*/true);
3369               return i;
3370             }
3371           else
3372             return -1;
3373         }
3374
3375       /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
3376          Strip such NOP_EXPRs, since VAL is used in non-lvalue context.  */
3377       if (TREE_CODE (val) == NOP_EXPR
3378           && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
3379           && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
3380         val = TREE_OPERAND (val, 0);
3381
3382       if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
3383         {
3384           if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
3385               || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
3386               || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
3387             val = decay_conversion (val);
3388         }
3389
3390       if (val == error_mark_node)
3391         return -1;
3392
3393       if (type != 0)
3394         {
3395           /* Formal parm type is specified by a function prototype.  */
3396           tree parmval;
3397
3398           if (!COMPLETE_TYPE_P (complete_type (type)))
3399             {
3400               if (complain & tf_error)
3401                 {
3402                   if (fndecl)
3403                     error ("parameter %P of %qD has incomplete type %qT",
3404                            i, fndecl, type);
3405                   else
3406                     error ("parameter %P has incomplete type %qT", i, type);
3407                 }
3408               parmval = error_mark_node;
3409             }
3410           else
3411             {
3412               parmval = convert_for_initialization
3413                 (NULL_TREE, type, val, flags,
3414                  "argument passing", fndecl, i, complain);
3415               parmval = convert_for_arg_passing (type, parmval);
3416             }
3417
3418           if (parmval == error_mark_node)
3419             return -1;
3420
3421           VEC_replace (tree, *values, i, parmval);
3422         }
3423       else
3424         {
3425           if (fndecl && DECL_BUILT_IN (fndecl)
3426               && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
3427             /* Don't do ellipsis conversion for __built_in_constant_p
3428                as this will result in spurious errors for non-trivial
3429                types.  */
3430             val = require_complete_type (val);
3431           else
3432             val = convert_arg_to_ellipsis (val);
3433
3434           VEC_replace (tree, *values, i, val);
3435         }
3436
3437       if (typetail)
3438         typetail = TREE_CHAIN (typetail);
3439     }
3440
3441   if (typetail != 0 && typetail != void_list_node)
3442     {
3443       /* See if there are default arguments that can be used.  Because
3444          we hold default arguments in the FUNCTION_TYPE (which is so
3445          wrong), we can see default parameters here from deduced
3446          contexts (and via typeof) for indirect function calls.
3447          Fortunately we know whether we have a function decl to
3448          provide default arguments in a language conformant
3449          manner.  */
3450       if (fndecl && TREE_PURPOSE (typetail)
3451           && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
3452         {
3453           for (; typetail != void_list_node; ++i)
3454             {
3455               tree parmval
3456                 = convert_default_arg (TREE_VALUE (typetail),
3457                                        TREE_PURPOSE (typetail),
3458                                        fndecl, i);
3459
3460               if (parmval == error_mark_node)
3461                 return -1;
3462
3463               VEC_safe_push (tree, gc, *values, parmval);
3464               typetail = TREE_CHAIN (typetail);
3465               /* ends with `...'.  */
3466               if (typetail == NULL_TREE)