OSDN Git Service

21201cf7f0a4bc621cbd5a9857d8c538b1b6433c
[pf3gnuchains/gcc-fork.git] / gcc / cp / call.c
1 /* Functions related to invoking methods and overloaded functions.
2    Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4    Contributed by Michael Tiemann (tiemann@cygnus.com) and
5    modified by Brendan Kehoe (brendan@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 2, 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 COPYING.  If not, write to
21 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA.  */
23
24
25 /* High-level class interface.  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "output.h"
34 #include "flags.h"
35 #include "rtl.h"
36 #include "toplev.h"
37 #include "expr.h"
38 #include "diagnostic.h"
39 #include "intl.h"
40 #include "target.h"
41 #include "convert.h"
42
43 /* The various kinds of conversion.  */
44
45 typedef enum conversion_kind {
46   ck_identity,
47   ck_lvalue,
48   ck_qual,
49   ck_std,
50   ck_ptr,
51   ck_pmem,
52   ck_base,
53   ck_ref_bind,
54   ck_user,
55   ck_ambig,
56   ck_rvalue
57 } conversion_kind;
58
59 /* The rank of the conversion.  Order of the enumerals matters; better
60    conversions should come earlier in the list.  */
61
62 typedef enum conversion_rank {
63   cr_identity,
64   cr_exact,
65   cr_promotion,
66   cr_std,
67   cr_pbool,
68   cr_user,
69   cr_ellipsis,
70   cr_bad
71 } conversion_rank;
72
73 /* An implicit conversion sequence, in the sense of [over.best.ics].
74    The first conversion to be performed is at the end of the chain.
75    That conversion is always an cr_identity conversion.  */
76
77 typedef struct conversion conversion;
78 struct conversion {
79   /* The kind of conversion represented by this step.  */
80   conversion_kind kind;
81   /* The rank of this conversion.  */
82   conversion_rank rank;
83   BOOL_BITFIELD user_conv_p : 1;
84   BOOL_BITFIELD ellipsis_p : 1;
85   BOOL_BITFIELD this_p : 1;
86   BOOL_BITFIELD bad_p : 1;
87   /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
88      temporary should be created to hold the result of the
89      conversion.  */
90   BOOL_BITFIELD need_temporary_p : 1;
91   /* If KIND is ck_identity or ck_base_conv, true to indicate that the
92      copy constructor must be accessible, even though it is not being
93      used.  */
94   BOOL_BITFIELD check_copy_constructor_p : 1;
95   /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
96      from a pointer-to-derived to pointer-to-base is being performed.  */
97   BOOL_BITFIELD base_p : 1;
98   /* The type of the expression resulting from the conversion.  */
99   tree type;
100   union {
101     /* The next conversion in the chain.  Since the conversions are
102        arranged from outermost to innermost, the NEXT conversion will
103        actually be performed before this conversion.  This variant is
104        used only when KIND is neither ck_identity nor ck_ambig.  */
105     conversion *next;
106     /* The expression at the beginning of the conversion chain.  This
107        variant is used only if KIND is ck_identity or ck_ambig.  */
108     tree expr;
109   } u;
110   /* The function candidate corresponding to this conversion
111      sequence.  This field is only used if KIND is ck_user.  */
112   struct z_candidate *cand;
113 };
114
115 #define CONVERSION_RANK(NODE)                   \
116   ((NODE)->bad_p ? cr_bad                       \
117    : (NODE)->ellipsis_p ? cr_ellipsis           \
118    : (NODE)->user_conv_p ? cr_user              \
119    : (NODE)->rank)
120
121 static struct obstack conversion_obstack;
122 static bool conversion_obstack_initialized;
123
124 static struct z_candidate * tourney (struct z_candidate *);
125 static int equal_functions (tree, tree);
126 static int joust (struct z_candidate *, struct z_candidate *, bool);
127 static int compare_ics (conversion *, conversion *);
128 static tree build_over_call (struct z_candidate *, int);
129 static tree build_java_interface_fn_ref (tree, tree);
130 #define convert_like(CONV, EXPR)                                \
131   convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0,           \
132                      /*issue_conversion_warnings=*/true,        \
133                      /*c_cast_p=*/false)
134 #define convert_like_with_context(CONV, EXPR, FN, ARGNO)        \
135   convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0,          \
136                      /*issue_conversion_warnings=*/true,        \
137                      /*c_cast_p=*/false)
138 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
139                                bool);
140 static void op_error (enum tree_code, enum tree_code, tree, tree,
141                       tree, const char *);
142 static tree build_object_call (tree, tree);
143 static tree resolve_args (tree);
144 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
145 static void print_z_candidate (const char *, struct z_candidate *);
146 static void print_z_candidates (struct z_candidate *);
147 static tree build_this (tree);
148 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
149 static bool any_strictly_viable (struct z_candidate *);
150 static struct z_candidate *add_template_candidate
151         (struct z_candidate **, tree, tree, tree, tree, tree,
152          tree, tree, int, unification_kind_t);
153 static struct z_candidate *add_template_candidate_real
154         (struct z_candidate **, tree, tree, tree, tree, tree,
155          tree, tree, int, tree, unification_kind_t);
156 static struct z_candidate *add_template_conv_candidate
157         (struct z_candidate **, tree, tree, tree, tree, tree, tree);
158 static void add_builtin_candidates
159         (struct z_candidate **, enum tree_code, enum tree_code,
160          tree, tree *, int);
161 static void add_builtin_candidate
162         (struct z_candidate **, enum tree_code, enum tree_code,
163          tree, tree, tree, tree *, tree *, int);
164 static bool is_complete (tree);
165 static void build_builtin_candidate
166         (struct z_candidate **, tree, tree, tree, tree *, tree *,
167          int);
168 static struct z_candidate *add_conv_candidate
169         (struct z_candidate **, tree, tree, tree, tree, tree);
170 static struct z_candidate *add_function_candidate
171         (struct z_candidate **, tree, tree, tree, tree, tree, int);
172 static conversion *implicit_conversion (tree, tree, tree, bool, int);
173 static conversion *standard_conversion (tree, tree, tree, bool, int);
174 static conversion *reference_binding (tree, tree, tree, int);
175 static conversion *build_conv (conversion_kind, tree, conversion *);
176 static bool is_subseq (conversion *, conversion *);
177 static tree maybe_handle_ref_bind (conversion **);
178 static void maybe_handle_implicit_object (conversion **);
179 static struct z_candidate *add_candidate
180         (struct z_candidate **, tree, tree, size_t,
181          conversion **, tree, tree, int);
182 static tree source_type (conversion *);
183 static void add_warning (struct z_candidate *, struct z_candidate *);
184 static bool reference_related_p (tree, tree);
185 static bool reference_compatible_p (tree, tree);
186 static conversion *convert_class_to_reference (tree, tree, tree);
187 static conversion *direct_reference_binding (tree, conversion *);
188 static bool promoted_arithmetic_type_p (tree);
189 static conversion *conditional_conversion (tree, tree);
190 static char *name_as_c_string (tree, tree, bool *);
191 static tree call_builtin_trap (void);
192 static tree prep_operand (tree);
193 static void add_candidates (tree, tree, tree, bool, tree, tree,
194                             int, struct z_candidate **);
195 static conversion *merge_conversion_sequences (conversion *, conversion *);
196 static bool magic_varargs_p (tree);
197 typedef void (*diagnostic_fn_t) (const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
198 static tree build_temp (tree, tree, int, diagnostic_fn_t *);
199 static void check_constructor_callable (tree, tree);
200
201 /* Returns nonzero iff the destructor name specified in NAME
202    (a BIT_NOT_EXPR) matches BASETYPE.  The operand of NAME can take many
203    forms...  */
204
205 bool
206 check_dtor_name (tree basetype, tree name)
207 {
208   name = TREE_OPERAND (name, 0);
209
210   /* Just accept something we've already complained about.  */
211   if (name == error_mark_node)
212     return true;
213
214   if (TREE_CODE (name) == TYPE_DECL)
215     name = TREE_TYPE (name);
216   else if (TYPE_P (name))
217     /* OK */;
218   else if (TREE_CODE (name) == IDENTIFIER_NODE)
219     {
220       if ((IS_AGGR_TYPE (basetype) && name == constructor_name (basetype))
221           || (TREE_CODE (basetype) == ENUMERAL_TYPE
222               && name == TYPE_IDENTIFIER (basetype)))
223         name = basetype;
224       else
225         name = get_type_value (name);
226     }
227   else
228     {
229       /* In the case of:
230
231          template <class T> struct S { ~S(); };
232          int i;
233          i.~S();
234
235          NAME will be a class template.  */
236       gcc_assert (DECL_CLASS_TEMPLATE_P (name));
237       return false;
238     }
239
240   if (name && TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (name))
241     return true;
242   return false;
243 }
244
245 /* We want the address of a function or method.  We avoid creating a
246    pointer-to-member function.  */
247
248 tree
249 build_addr_func (tree function)
250 {
251   tree type = TREE_TYPE (function);
252
253   /* We have to do these by hand to avoid real pointer to member
254      functions.  */
255   if (TREE_CODE (type) == METHOD_TYPE)
256     {
257       if (TREE_CODE (function) == OFFSET_REF)
258         {
259           tree object = build_address (TREE_OPERAND (function, 0));
260           return get_member_function_from_ptrfunc (&object,
261                                                    TREE_OPERAND (function, 1));
262         }
263       function = build_address (function);
264     }
265   else
266     function = decay_conversion (function);
267
268   return function;
269 }
270
271 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
272    POINTER_TYPE to those.  Note, pointer to member function types
273    (TYPE_PTRMEMFUNC_P) must be handled by our callers.  */
274
275 tree
276 build_call (tree function, tree parms)
277 {
278   int is_constructor = 0;
279   int nothrow;
280   tree tmp;
281   tree decl;
282   tree result_type;
283   tree fntype;
284
285   function = build_addr_func (function);
286
287   if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
288     {
289       sorry ("unable to call pointer to member function here");
290       return error_mark_node;
291     }
292
293   fntype = TREE_TYPE (TREE_TYPE (function));
294   result_type = TREE_TYPE (fntype);
295
296   if (TREE_CODE (function) == ADDR_EXPR
297       && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
298     decl = TREE_OPERAND (function, 0);
299   else
300     decl = NULL_TREE;
301
302   /* We check both the decl and the type; a function may be known not to
303      throw without being declared throw().  */
304   nothrow = ((decl && TREE_NOTHROW (decl))
305              || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
306
307   if (decl && TREE_THIS_VOLATILE (decl) && cfun)
308     current_function_returns_abnormally = 1;
309
310   if (decl && TREE_DEPRECATED (decl))
311     warn_deprecated_use (decl);
312   require_complete_eh_spec_types (fntype, decl);
313
314   if (decl && DECL_CONSTRUCTOR_P (decl))
315     is_constructor = 1;
316
317   if (decl && ! TREE_USED (decl))
318     {
319       /* We invoke build_call directly for several library functions.
320          These may have been declared normally if we're building libgcc,
321          so we can't just check DECL_ARTIFICIAL.  */
322       gcc_assert (DECL_ARTIFICIAL (decl)
323                   || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
324                                "__", 2));
325       mark_used (decl);
326     }
327
328   /* Don't pass empty class objects by value.  This is useful
329      for tags in STL, which are used to control overload resolution.
330      We don't need to handle other cases of copying empty classes.  */
331   if (! decl || ! DECL_BUILT_IN (decl))
332     for (tmp = parms; tmp; tmp = TREE_CHAIN (tmp))
333       if (is_empty_class (TREE_TYPE (TREE_VALUE (tmp)))
334           && ! TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (tmp))))
335         {
336           tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (TREE_VALUE (tmp)));
337           TREE_VALUE (tmp) = build2 (COMPOUND_EXPR, TREE_TYPE (t),
338                                      TREE_VALUE (tmp), t);
339         }
340
341   function = build3 (CALL_EXPR, result_type, function, parms, NULL_TREE);
342   TREE_HAS_CONSTRUCTOR (function) = is_constructor;
343   TREE_NOTHROW (function) = nothrow;
344
345   return function;
346 }
347
348 /* Build something of the form ptr->method (args)
349    or object.method (args).  This can also build
350    calls to constructors, and find friends.
351
352    Member functions always take their class variable
353    as a pointer.
354
355    INSTANCE is a class instance.
356
357    NAME is the name of the method desired, usually an IDENTIFIER_NODE.
358
359    PARMS help to figure out what that NAME really refers to.
360
361    BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
362    down to the real instance type to use for access checking.  We need this
363    information to get protected accesses correct.
364
365    FLAGS is the logical disjunction of zero or more LOOKUP_
366    flags.  See cp-tree.h for more info.
367
368    If this is all OK, calls build_function_call with the resolved
369    member function.
370
371    This function must also handle being called to perform
372    initialization, promotion/coercion of arguments, and
373    instantiation of default parameters.
374
375    Note that NAME may refer to an instance variable name.  If
376    `operator()()' is defined for the type of that field, then we return
377    that result.  */
378
379 /* New overloading code.  */
380
381 typedef struct z_candidate z_candidate;
382
383 typedef struct candidate_warning candidate_warning;
384 struct candidate_warning {
385   z_candidate *loser;
386   candidate_warning *next;
387 };
388
389 struct z_candidate {
390   /* The FUNCTION_DECL that will be called if this candidate is
391      selected by overload resolution.  */
392   tree fn;
393   /* The arguments to use when calling this function.  */
394   tree args;
395   /* The implicit conversion sequences for each of the arguments to
396      FN.  */
397   conversion **convs;
398   /* The number of implicit conversion sequences.  */
399   size_t num_convs;
400   /* If FN is a user-defined conversion, the standard conversion
401      sequence from the type returned by FN to the desired destination
402      type.  */
403   conversion *second_conv;
404   int viable;
405   /* If FN is a member function, the binfo indicating the path used to
406      qualify the name of FN at the call site.  This path is used to
407      determine whether or not FN is accessible if it is selected by
408      overload resolution.  The DECL_CONTEXT of FN will always be a
409      (possibly improper) base of this binfo.  */
410   tree access_path;
411   /* If FN is a non-static member function, the binfo indicating the
412      subobject to which the `this' pointer should be converted if FN
413      is selected by overload resolution.  The type pointed to the by
414      the `this' pointer must correspond to the most derived class
415      indicated by the CONVERSION_PATH.  */
416   tree conversion_path;
417   tree template_decl;
418   candidate_warning *warnings;
419   z_candidate *next;
420 };
421
422 /* Returns true iff T is a null pointer constant in the sense of
423    [conv.ptr].  */
424
425 bool
426 null_ptr_cst_p (tree t)
427 {
428   /* [conv.ptr]
429
430      A null pointer constant is an integral constant expression
431      (_expr.const_) rvalue of integer type that evaluates to zero.  */
432   t = integral_constant_value (t);
433   if (t == null_node
434       || (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t)))
435     return true;
436   return false;
437 }
438
439 /* Returns nonzero if PARMLIST consists of only default parms and/or
440    ellipsis.  */
441
442 bool
443 sufficient_parms_p (tree parmlist)
444 {
445   for (; parmlist && parmlist != void_list_node;
446        parmlist = TREE_CHAIN (parmlist))
447     if (!TREE_PURPOSE (parmlist))
448       return false;
449   return true;
450 }
451
452 /* Allocate N bytes of memory from the conversion obstack.  The memory
453    is zeroed before being returned.  */
454
455 static void *
456 conversion_obstack_alloc (size_t n)
457 {
458   void *p;
459   if (!conversion_obstack_initialized)
460     {
461       gcc_obstack_init (&conversion_obstack);
462       conversion_obstack_initialized = true;
463     }
464   p = obstack_alloc (&conversion_obstack, n);
465   memset (p, 0, n);
466   return p;
467 }
468
469 /* Dynamically allocate a conversion.  */
470
471 static conversion *
472 alloc_conversion (conversion_kind kind)
473 {
474   conversion *c;
475   c = conversion_obstack_alloc (sizeof (conversion));
476   c->kind = kind;
477   return c;
478 }
479
480 #ifdef ENABLE_CHECKING
481
482 /* Make sure that all memory on the conversion obstack has been
483    freed.  */
484
485 void
486 validate_conversion_obstack (void)
487 {
488   if (conversion_obstack_initialized)
489     gcc_assert ((obstack_next_free (&conversion_obstack)
490                  == obstack_base (&conversion_obstack)));
491 }
492
493 #endif /* ENABLE_CHECKING */
494
495 /* Dynamically allocate an array of N conversions.  */
496
497 static conversion **
498 alloc_conversions (size_t n)
499 {
500   return conversion_obstack_alloc (n * sizeof (conversion *));
501 }
502
503 static conversion *
504 build_conv (conversion_kind code, tree type, conversion *from)
505 {
506   conversion *t;
507   conversion_rank rank = CONVERSION_RANK (from);
508
509   /* We can't use buildl1 here because CODE could be USER_CONV, which
510      takes two arguments.  In that case, the caller is responsible for
511      filling in the second argument.  */
512   t = alloc_conversion (code);
513   t->type = type;
514   t->u.next = from;
515
516   switch (code)
517     {
518     case ck_ptr:
519     case ck_pmem:
520     case ck_base:
521     case ck_std:
522       if (rank < cr_std)
523         rank = cr_std;
524       break;
525
526     case ck_qual:
527       if (rank < cr_exact)
528         rank = cr_exact;
529       break;
530
531     default:
532       break;
533     }
534   t->rank = rank;
535   t->user_conv_p = (code == ck_user || from->user_conv_p);
536   t->bad_p = from->bad_p;
537   t->base_p = false;
538   return t;
539 }
540
541 /* Build a representation of the identity conversion from EXPR to
542    itself.  The TYPE should match the type of EXPR, if EXPR is non-NULL.  */
543
544 static conversion *
545 build_identity_conv (tree type, tree expr)
546 {
547   conversion *c;
548
549   c = alloc_conversion (ck_identity);
550   c->type = type;
551   c->u.expr = expr;
552
553   return c;
554 }
555
556 /* Converting from EXPR to TYPE was ambiguous in the sense that there
557    were multiple user-defined conversions to accomplish the job.
558    Build a conversion that indicates that ambiguity.  */
559
560 static conversion *
561 build_ambiguous_conv (tree type, tree expr)
562 {
563   conversion *c;
564
565   c = alloc_conversion (ck_ambig);
566   c->type = type;
567   c->u.expr = expr;
568
569   return c;
570 }
571
572 tree
573 strip_top_quals (tree t)
574 {
575   if (TREE_CODE (t) == ARRAY_TYPE)
576     return t;
577   return cp_build_qualified_type (t, 0);
578 }
579
580 /* Returns the standard conversion path (see [conv]) from type FROM to type
581    TO, if any.  For proper handling of null pointer constants, you must
582    also pass the expression EXPR to convert from.  If C_CAST_P is true,
583    this conversion is coming from a C-style cast.  */
584
585 static conversion *
586 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
587                      int flags)
588 {
589   enum tree_code fcode, tcode;
590   conversion *conv;
591   bool fromref = false;
592
593   to = non_reference (to);
594   if (TREE_CODE (from) == REFERENCE_TYPE)
595     {
596       fromref = true;
597       from = TREE_TYPE (from);
598     }
599   to = strip_top_quals (to);
600   from = strip_top_quals (from);
601
602   if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
603       && expr && type_unknown_p (expr))
604     {
605       expr = instantiate_type (to, expr, tf_conv);
606       if (expr == error_mark_node)
607         return NULL;
608       from = TREE_TYPE (expr);
609     }
610
611   fcode = TREE_CODE (from);
612   tcode = TREE_CODE (to);
613
614   conv = build_identity_conv (from, expr);
615   if (fcode == FUNCTION_TYPE)
616     {
617       from = build_pointer_type (from);
618       fcode = TREE_CODE (from);
619       conv = build_conv (ck_lvalue, from, conv);
620     }
621   else if (fcode == ARRAY_TYPE)
622     {
623       from = build_pointer_type (TREE_TYPE (from));
624       fcode = TREE_CODE (from);
625       conv = build_conv (ck_lvalue, from, conv);
626     }
627   else if (fromref || (expr && lvalue_p (expr)))
628     conv = build_conv (ck_rvalue, from, conv);
629
630    /* Allow conversion between `__complex__' data types.  */
631   if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
632     {
633       /* The standard conversion sequence to convert FROM to TO is
634          the standard conversion sequence to perform componentwise
635          conversion.  */
636       conversion *part_conv = standard_conversion
637         (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
638
639       if (part_conv)
640         {
641           conv = build_conv (part_conv->kind, to, conv);
642           conv->rank = part_conv->rank;
643         }
644       else
645         conv = NULL;
646
647       return conv;
648     }
649
650   if (same_type_p (from, to))
651     return conv;
652
653   if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to))
654       && expr && null_ptr_cst_p (expr))
655     conv = build_conv (ck_std, to, conv);
656   else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
657            || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
658     {
659       /* For backwards brain damage compatibility, allow interconversion of
660          pointers and integers with a pedwarn.  */
661       conv = build_conv (ck_std, to, conv);
662       conv->bad_p = true;
663     }
664   else if (tcode == ENUMERAL_TYPE && fcode == INTEGER_TYPE)
665     {
666       /* For backwards brain damage compatibility, allow interconversion of
667          enums and integers with a pedwarn.  */
668       conv = build_conv (ck_std, to, conv);
669       conv->bad_p = true;
670     }
671   else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
672            || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
673     {
674       tree to_pointee;
675       tree from_pointee;
676
677       if (tcode == POINTER_TYPE
678           && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
679                                                         TREE_TYPE (to)))
680         ;
681       else if (VOID_TYPE_P (TREE_TYPE (to))
682                && !TYPE_PTRMEM_P (from)
683                && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
684         {
685           from = build_pointer_type
686             (cp_build_qualified_type (void_type_node,
687                                       cp_type_quals (TREE_TYPE (from))));
688           conv = build_conv (ck_ptr, from, conv);
689         }
690       else if (TYPE_PTRMEM_P (from))
691         {
692           tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
693           tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
694
695           if (DERIVED_FROM_P (fbase, tbase)
696               && (same_type_ignoring_top_level_qualifiers_p
697                   (TYPE_PTRMEM_POINTED_TO_TYPE (from),
698                    TYPE_PTRMEM_POINTED_TO_TYPE (to))))
699             {
700               from = build_ptrmem_type (tbase,
701                                         TYPE_PTRMEM_POINTED_TO_TYPE (from));
702               conv = build_conv (ck_pmem, from, conv);
703             }
704           else if (!same_type_p (fbase, tbase))
705             return NULL;
706         }
707       else if (IS_AGGR_TYPE (TREE_TYPE (from))
708                && IS_AGGR_TYPE (TREE_TYPE (to))
709                /* [conv.ptr]
710
711                   An rvalue of type "pointer to cv D," where D is a
712                   class type, can be converted to an rvalue of type
713                   "pointer to cv B," where B is a base class (clause
714                   _class.derived_) of D.  If B is an inaccessible
715                   (clause _class.access_) or ambiguous
716                   (_class.member.lookup_) base class of D, a program
717                   that necessitates this conversion is ill-formed.
718                   Therefore, we use DERIVED_FROM_P, and do not check
719                   access or uniqueness.  */
720                && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
721         {
722           from =
723             cp_build_qualified_type (TREE_TYPE (to),
724                                      cp_type_quals (TREE_TYPE (from)));
725           from = build_pointer_type (from);
726           conv = build_conv (ck_ptr, from, conv);
727           conv->base_p = true;
728         }
729
730       if (tcode == POINTER_TYPE)
731         {
732           to_pointee = TREE_TYPE (to);
733           from_pointee = TREE_TYPE (from);
734         }
735       else
736         {
737           to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
738           from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
739         }
740
741       if (same_type_p (from, to))
742         /* OK */;
743       else if (c_cast_p && comp_ptr_ttypes_const (to, from))
744         /* In a C-style cast, we ignore CV-qualification because we
745            are allowed to perform a static_cast followed by a
746            const_cast.  */
747         conv = build_conv (ck_qual, to, conv);
748       else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
749         conv = build_conv (ck_qual, to, conv);
750       else if (expr && string_conv_p (to, expr, 0))
751         /* converting from string constant to char *.  */
752         conv = build_conv (ck_qual, to, conv);
753       else if (ptr_reasonably_similar (to_pointee, from_pointee))
754         {
755           conv = build_conv (ck_ptr, to, conv);
756           conv->bad_p = true;
757         }
758       else
759         return NULL;
760
761       from = to;
762     }
763   else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
764     {
765       tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
766       tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
767       tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
768       tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
769
770       if (!DERIVED_FROM_P (fbase, tbase)
771           || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
772           || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
773                          TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
774           || cp_type_quals (fbase) != cp_type_quals (tbase))
775         return 0;
776
777       from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
778       from = build_method_type_directly (from,
779                                          TREE_TYPE (fromfn),
780                                          TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
781       from = build_ptrmemfunc_type (build_pointer_type (from));
782       conv = build_conv (ck_pmem, from, conv);
783       conv->base_p = true;
784     }
785   else if (tcode == BOOLEAN_TYPE)
786     {
787       /* [conv.bool]
788
789           An rvalue of arithmetic, enumeration, pointer, or pointer to
790           member type can be converted to an rvalue of type bool.  */
791       if (ARITHMETIC_TYPE_P (from)
792           || fcode == ENUMERAL_TYPE
793           || fcode == POINTER_TYPE
794           || TYPE_PTR_TO_MEMBER_P (from))
795         {
796           conv = build_conv (ck_std, to, conv);
797           if (fcode == POINTER_TYPE
798               || TYPE_PTRMEM_P (from)
799               || (TYPE_PTRMEMFUNC_P (from)
800                   && conv->rank < cr_pbool))
801             conv->rank = cr_pbool;
802           return conv;
803         }
804
805       return NULL;
806     }
807   /* We don't check for ENUMERAL_TYPE here because there are no standard
808      conversions to enum type.  */
809   else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
810            || tcode == REAL_TYPE)
811     {
812       if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
813         return 0;
814       conv = build_conv (ck_std, to, conv);
815
816       /* Give this a better rank if it's a promotion.  */
817       if (same_type_p (to, type_promotes_to (from))
818           && conv->u.next->rank <= cr_promotion)
819         conv->rank = cr_promotion;
820     }
821   else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
822            && vector_types_convertible_p (from, to))
823     return build_conv (ck_std, to, conv);
824   else if (!(flags & LOOKUP_CONSTRUCTOR_CALLABLE)
825            && IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
826            && is_properly_derived_from (from, to))
827     {
828       if (conv->kind == ck_rvalue)
829         conv = conv->u.next;
830       conv = build_conv (ck_base, to, conv);
831       /* The derived-to-base conversion indicates the initialization
832          of a parameter with base type from an object of a derived
833          type.  A temporary object is created to hold the result of
834          the conversion.  */
835       conv->need_temporary_p = true;
836     }
837   else
838     return NULL;
839
840   return conv;
841 }
842
843 /* Returns nonzero if T1 is reference-related to T2.  */
844
845 static bool
846 reference_related_p (tree t1, tree t2)
847 {
848   t1 = TYPE_MAIN_VARIANT (t1);
849   t2 = TYPE_MAIN_VARIANT (t2);
850
851   /* [dcl.init.ref]
852
853      Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
854      to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
855      of T2.  */
856   return (same_type_p (t1, t2)
857           || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
858               && DERIVED_FROM_P (t1, t2)));
859 }
860
861 /* Returns nonzero if T1 is reference-compatible with T2.  */
862
863 static bool
864 reference_compatible_p (tree t1, tree t2)
865 {
866   /* [dcl.init.ref]
867
868      "cv1 T1" is reference compatible with "cv2 T2" if T1 is
869      reference-related to T2 and cv1 is the same cv-qualification as,
870      or greater cv-qualification than, cv2.  */
871   return (reference_related_p (t1, t2)
872           && at_least_as_qualified_p (t1, t2));
873 }
874
875 /* Determine whether or not the EXPR (of class type S) can be
876    converted to T as in [over.match.ref].  */
877
878 static conversion *
879 convert_class_to_reference (tree t, tree s, tree expr)
880 {
881   tree conversions;
882   tree arglist;
883   conversion *conv;
884   tree reference_type;
885   struct z_candidate *candidates;
886   struct z_candidate *cand;
887   bool any_viable_p;
888
889   conversions = lookup_conversions (s);
890   if (!conversions)
891     return NULL;
892
893   /* [over.match.ref]
894
895      Assuming that "cv1 T" is the underlying type of the reference
896      being initialized, and "cv S" is the type of the initializer
897      expression, with S a class type, the candidate functions are
898      selected as follows:
899
900      --The conversion functions of S and its base classes are
901        considered.  Those that are not hidden within S and yield type
902        "reference to cv2 T2", where "cv1 T" is reference-compatible
903        (_dcl.init.ref_) with "cv2 T2", are candidate functions.
904
905      The argument list has one argument, which is the initializer
906      expression.  */
907
908   candidates = 0;
909
910   /* Conceptually, we should take the address of EXPR and put it in
911      the argument list.  Unfortunately, however, that can result in
912      error messages, which we should not issue now because we are just
913      trying to find a conversion operator.  Therefore, we use NULL,
914      cast to the appropriate type.  */
915   arglist = build_int_cst (build_pointer_type (s), 0);
916   arglist = build_tree_list (NULL_TREE, arglist);
917
918   reference_type = build_reference_type (t);
919
920   while (conversions)
921     {
922       tree fns = TREE_VALUE (conversions);
923
924       for (; fns; fns = OVL_NEXT (fns))
925         {
926           tree f = OVL_CURRENT (fns);
927           tree t2 = TREE_TYPE (TREE_TYPE (f));
928
929           cand = NULL;
930
931           /* If this is a template function, try to get an exact
932              match.  */
933           if (TREE_CODE (f) == TEMPLATE_DECL)
934             {
935               cand = add_template_candidate (&candidates,
936                                              f, s,
937                                              NULL_TREE,
938                                              arglist,
939                                              reference_type,
940                                              TYPE_BINFO (s),
941                                              TREE_PURPOSE (conversions),
942                                              LOOKUP_NORMAL,
943                                              DEDUCE_CONV);
944
945               if (cand)
946                 {
947                   /* Now, see if the conversion function really returns
948                      an lvalue of the appropriate type.  From the
949                      point of view of unification, simply returning an
950                      rvalue of the right type is good enough.  */
951                   f = cand->fn;
952                   t2 = TREE_TYPE (TREE_TYPE (f));
953                   if (TREE_CODE (t2) != REFERENCE_TYPE
954                       || !reference_compatible_p (t, TREE_TYPE (t2)))
955                     {
956                       candidates = candidates->next;
957                       cand = NULL;
958                     }
959                 }
960             }
961           else if (TREE_CODE (t2) == REFERENCE_TYPE
962                    && reference_compatible_p (t, TREE_TYPE (t2)))
963             cand = add_function_candidate (&candidates, f, s, arglist,
964                                            TYPE_BINFO (s),
965                                            TREE_PURPOSE (conversions),
966                                            LOOKUP_NORMAL);
967
968           if (cand)
969             {
970               conversion *identity_conv;
971               /* Build a standard conversion sequence indicating the
972                  binding from the reference type returned by the
973                  function to the desired REFERENCE_TYPE.  */
974               identity_conv
975                 = build_identity_conv (TREE_TYPE (TREE_TYPE
976                                                   (TREE_TYPE (cand->fn))),
977                                        NULL_TREE);
978               cand->second_conv
979                 = (direct_reference_binding
980                    (reference_type, identity_conv));
981               cand->second_conv->bad_p |= cand->convs[0]->bad_p;
982             }
983         }
984       conversions = TREE_CHAIN (conversions);
985     }
986
987   candidates = splice_viable (candidates, pedantic, &any_viable_p);
988   /* If none of the conversion functions worked out, let our caller
989      know.  */
990   if (!any_viable_p)
991     return NULL;
992
993   cand = tourney (candidates);
994   if (!cand)
995     return NULL;
996
997   /* Now that we know that this is the function we're going to use fix
998      the dummy first argument.  */
999   cand->args = tree_cons (NULL_TREE,
1000                           build_this (expr),
1001                           TREE_CHAIN (cand->args));
1002
1003   /* Build a user-defined conversion sequence representing the
1004      conversion.  */
1005   conv = build_conv (ck_user,
1006                      TREE_TYPE (TREE_TYPE (cand->fn)),
1007                      build_identity_conv (TREE_TYPE (expr), expr));
1008   conv->cand = cand;
1009
1010   /* Merge it with the standard conversion sequence from the
1011      conversion function's return type to the desired type.  */
1012   cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1013
1014   if (cand->viable == -1)
1015     conv->bad_p = true;
1016
1017   return cand->second_conv;
1018 }
1019
1020 /* A reference of the indicated TYPE is being bound directly to the
1021    expression represented by the implicit conversion sequence CONV.
1022    Return a conversion sequence for this binding.  */
1023
1024 static conversion *
1025 direct_reference_binding (tree type, conversion *conv)
1026 {
1027   tree t;
1028
1029   gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1030   gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1031
1032   t = TREE_TYPE (type);
1033
1034   /* [over.ics.rank]
1035
1036      When a parameter of reference type binds directly
1037      (_dcl.init.ref_) to an argument expression, the implicit
1038      conversion sequence is the identity conversion, unless the
1039      argument expression has a type that is a derived class of the
1040      parameter type, in which case the implicit conversion sequence is
1041      a derived-to-base Conversion.
1042
1043      If the parameter binds directly to the result of applying a
1044      conversion function to the argument expression, the implicit
1045      conversion sequence is a user-defined conversion sequence
1046      (_over.ics.user_), with the second standard conversion sequence
1047      either an identity conversion or, if the conversion function
1048      returns an entity of a type that is a derived class of the
1049      parameter type, a derived-to-base conversion.  */
1050   if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1051     {
1052       /* Represent the derived-to-base conversion.  */
1053       conv = build_conv (ck_base, t, conv);
1054       /* We will actually be binding to the base-class subobject in
1055          the derived class, so we mark this conversion appropriately.
1056          That way, convert_like knows not to generate a temporary.  */
1057       conv->need_temporary_p = false;
1058     }
1059   return build_conv (ck_ref_bind, type, conv);
1060 }
1061
1062 /* Returns the conversion path from type FROM to reference type TO for
1063    purposes of reference binding.  For lvalue binding, either pass a
1064    reference type to FROM or an lvalue expression to EXPR.  If the
1065    reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1066    the conversion returned.  */
1067
1068 static conversion *
1069 reference_binding (tree rto, tree rfrom, tree expr, int flags)
1070 {
1071   conversion *conv = NULL;
1072   tree to = TREE_TYPE (rto);
1073   tree from = rfrom;
1074   bool related_p;
1075   bool compatible_p;
1076   cp_lvalue_kind lvalue_p = clk_none;
1077
1078   if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1079     {
1080       expr = instantiate_type (to, expr, tf_none);
1081       if (expr == error_mark_node)
1082         return NULL;
1083       from = TREE_TYPE (expr);
1084     }
1085
1086   if (TREE_CODE (from) == REFERENCE_TYPE)
1087     {
1088       /* Anything with reference type is an lvalue.  */
1089       lvalue_p = clk_ordinary;
1090       from = TREE_TYPE (from);
1091     }
1092   else if (expr)
1093     lvalue_p = real_lvalue_p (expr);
1094
1095   /* Figure out whether or not the types are reference-related and
1096      reference compatible.  We have do do this after stripping
1097      references from FROM.  */
1098   related_p = reference_related_p (to, from);
1099   compatible_p = reference_compatible_p (to, from);
1100
1101   if (lvalue_p && compatible_p)
1102     {
1103       /* [dcl.init.ref]
1104
1105          If the initializer expression
1106
1107          -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1108             is reference-compatible with "cv2 T2,"
1109
1110          the reference is bound directly to the initializer expression
1111          lvalue.  */
1112       conv = build_identity_conv (from, expr);
1113       conv = direct_reference_binding (rto, conv);
1114       if ((lvalue_p & clk_bitfield) != 0
1115           || ((lvalue_p & clk_packed) != 0 && !TYPE_PACKED (to)))
1116         /* For the purposes of overload resolution, we ignore the fact
1117            this expression is a bitfield or packed field. (In particular,
1118            [over.ics.ref] says specifically that a function with a
1119            non-const reference parameter is viable even if the
1120            argument is a bitfield.)
1121
1122            However, when we actually call the function we must create
1123            a temporary to which to bind the reference.  If the
1124            reference is volatile, or isn't const, then we cannot make
1125            a temporary, so we just issue an error when the conversion
1126            actually occurs.  */
1127         conv->need_temporary_p = true;
1128
1129       return conv;
1130     }
1131   else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
1132     {
1133       /* [dcl.init.ref]
1134
1135          If the initializer expression
1136
1137          -- has a class type (i.e., T2 is a class type) can be
1138             implicitly converted to an lvalue of type "cv3 T3," where
1139             "cv1 T1" is reference-compatible with "cv3 T3".  (this
1140             conversion is selected by enumerating the applicable
1141             conversion functions (_over.match.ref_) and choosing the
1142             best one through overload resolution.  (_over.match_).
1143
1144         the reference is bound to the lvalue result of the conversion
1145         in the second case.  */
1146       conv = convert_class_to_reference (to, from, expr);
1147       if (conv)
1148         return conv;
1149     }
1150
1151   /* From this point on, we conceptually need temporaries, even if we
1152      elide them.  Only the cases above are "direct bindings".  */
1153   if (flags & LOOKUP_NO_TEMP_BIND)
1154     return NULL;
1155
1156   /* [over.ics.rank]
1157
1158      When a parameter of reference type is not bound directly to an
1159      argument expression, the conversion sequence is the one required
1160      to convert the argument expression to the underlying type of the
1161      reference according to _over.best.ics_.  Conceptually, this
1162      conversion sequence corresponds to copy-initializing a temporary
1163      of the underlying type with the argument expression.  Any
1164      difference in top-level cv-qualification is subsumed by the
1165      initialization itself and does not constitute a conversion.  */
1166
1167   /* [dcl.init.ref]
1168
1169      Otherwise, the reference shall be to a non-volatile const type.  */
1170   if (!CP_TYPE_CONST_NON_VOLATILE_P (to))
1171     return NULL;
1172
1173   /* [dcl.init.ref]
1174
1175      If the initializer expression is an rvalue, with T2 a class type,
1176      and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1177      is bound in one of the following ways:
1178
1179      -- The reference is bound to the object represented by the rvalue
1180         or to a sub-object within that object.
1181
1182      -- ...
1183
1184      We use the first alternative.  The implicit conversion sequence
1185      is supposed to be same as we would obtain by generating a
1186      temporary.  Fortunately, if the types are reference compatible,
1187      then this is either an identity conversion or the derived-to-base
1188      conversion, just as for direct binding.  */
1189   if (CLASS_TYPE_P (from) && compatible_p)
1190     {
1191       conv = build_identity_conv (from, expr);
1192       conv = direct_reference_binding (rto, conv);
1193       if (!(flags & LOOKUP_CONSTRUCTOR_CALLABLE))
1194         conv->u.next->check_copy_constructor_p = true;
1195       return conv;
1196     }
1197
1198   /* [dcl.init.ref]
1199
1200      Otherwise, a temporary of type "cv1 T1" is created and
1201      initialized from the initializer expression using the rules for a
1202      non-reference copy initialization.  If T1 is reference-related to
1203      T2, cv1 must be the same cv-qualification as, or greater
1204      cv-qualification than, cv2; otherwise, the program is ill-formed.  */
1205   if (related_p && !at_least_as_qualified_p (to, from))
1206     return NULL;
1207
1208   conv = implicit_conversion (to, from, expr, /*c_cast_p=*/false, 
1209                               flags);
1210   if (!conv)
1211     return NULL;
1212
1213   conv = build_conv (ck_ref_bind, rto, conv);
1214   /* This reference binding, unlike those above, requires the
1215      creation of a temporary.  */
1216   conv->need_temporary_p = true;
1217
1218   return conv;
1219 }
1220
1221 /* Returns the implicit conversion sequence (see [over.ics]) from type
1222    FROM to type TO.  The optional expression EXPR may affect the
1223    conversion.  FLAGS are the usual overloading flags.  Only
1224    LOOKUP_NO_CONVERSION is significant.  If C_CAST_P is true, this
1225    conversion is coming from a C-style cast.  */
1226
1227 static conversion *
1228 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1229                      int flags)
1230 {
1231   conversion *conv;
1232
1233   if (from == error_mark_node || to == error_mark_node
1234       || expr == error_mark_node)
1235     return NULL;
1236
1237   if (TREE_CODE (to) == REFERENCE_TYPE)
1238     conv = reference_binding (to, from, expr, flags);
1239   else
1240     conv = standard_conversion (to, from, expr, c_cast_p, flags);
1241
1242   if (conv)
1243     return conv;
1244
1245   if (expr != NULL_TREE
1246       && (IS_AGGR_TYPE (from)
1247           || IS_AGGR_TYPE (to))
1248       && (flags & LOOKUP_NO_CONVERSION) == 0)
1249     {
1250       struct z_candidate *cand;
1251
1252       cand = build_user_type_conversion_1
1253         (to, expr, LOOKUP_ONLYCONVERTING);
1254       if (cand)
1255         conv = cand->second_conv;
1256
1257       /* We used to try to bind a reference to a temporary here, but that
1258          is now handled by the recursive call to this function at the end
1259          of reference_binding.  */
1260       return conv;
1261     }
1262
1263   return NULL;
1264 }
1265
1266 /* Add a new entry to the list of candidates.  Used by the add_*_candidate
1267    functions.  */
1268
1269 static struct z_candidate *
1270 add_candidate (struct z_candidate **candidates,
1271                tree fn, tree args,
1272                size_t num_convs, conversion **convs,
1273                tree access_path, tree conversion_path,
1274                int viable)
1275 {
1276   struct z_candidate *cand
1277     = conversion_obstack_alloc (sizeof (struct z_candidate));
1278
1279   cand->fn = fn;
1280   cand->args = args;
1281   cand->convs = convs;
1282   cand->num_convs = num_convs;
1283   cand->access_path = access_path;
1284   cand->conversion_path = conversion_path;
1285   cand->viable = viable;
1286   cand->next = *candidates;
1287   *candidates = cand;
1288
1289   return cand;
1290 }
1291
1292 /* Create an overload candidate for the function or method FN called with
1293    the argument list ARGLIST and add it to CANDIDATES.  FLAGS is passed on
1294    to implicit_conversion.
1295
1296    CTYPE, if non-NULL, is the type we want to pretend this function
1297    comes from for purposes of overload resolution.  */
1298
1299 static struct z_candidate *
1300 add_function_candidate (struct z_candidate **candidates,
1301                         tree fn, tree ctype, tree arglist,
1302                         tree access_path, tree conversion_path,
1303                         int flags)
1304 {
1305   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1306   int i, len;
1307   conversion **convs;
1308   tree parmnode, argnode;
1309   tree orig_arglist;
1310   int viable = 1;
1311
1312   /* Built-in functions that haven't been declared don't really
1313      exist.  */
1314   if (DECL_ANTICIPATED (fn))
1315     return NULL;
1316
1317   /* The `this', `in_chrg' and VTT arguments to constructors are not
1318      considered in overload resolution.  */
1319   if (DECL_CONSTRUCTOR_P (fn))
1320     {
1321       parmlist = skip_artificial_parms_for (fn, parmlist);
1322       orig_arglist = arglist;
1323       arglist = skip_artificial_parms_for (fn, arglist);
1324     }
1325   else
1326     orig_arglist = arglist;
1327
1328   len = list_length (arglist);
1329   convs = alloc_conversions (len);
1330
1331   /* 13.3.2 - Viable functions [over.match.viable]
1332      First, to be a viable function, a candidate function shall have enough
1333      parameters to agree in number with the arguments in the list.
1334
1335      We need to check this first; otherwise, checking the ICSes might cause
1336      us to produce an ill-formed template instantiation.  */
1337
1338   parmnode = parmlist;
1339   for (i = 0; i < len; ++i)
1340     {
1341       if (parmnode == NULL_TREE || parmnode == void_list_node)
1342         break;
1343       parmnode = TREE_CHAIN (parmnode);
1344     }
1345
1346   if (i < len && parmnode)
1347     viable = 0;
1348
1349   /* Make sure there are default args for the rest of the parms.  */
1350   else if (!sufficient_parms_p (parmnode))
1351     viable = 0;
1352
1353   if (! viable)
1354     goto out;
1355
1356   /* Second, for F to be a viable function, there shall exist for each
1357      argument an implicit conversion sequence that converts that argument
1358      to the corresponding parameter of F.  */
1359
1360   parmnode = parmlist;
1361   argnode = arglist;
1362
1363   for (i = 0; i < len; ++i)
1364     {
1365       tree arg = TREE_VALUE (argnode);
1366       tree argtype = lvalue_type (arg);
1367       conversion *t;
1368       int is_this;
1369
1370       if (parmnode == void_list_node)
1371         break;
1372
1373       is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1374                  && ! DECL_CONSTRUCTOR_P (fn));
1375
1376       if (parmnode)
1377         {
1378           tree parmtype = TREE_VALUE (parmnode);
1379
1380           /* The type of the implicit object parameter ('this') for
1381              overload resolution is not always the same as for the
1382              function itself; conversion functions are considered to
1383              be members of the class being converted, and functions
1384              introduced by a using-declaration are considered to be
1385              members of the class that uses them.
1386
1387              Since build_over_call ignores the ICS for the `this'
1388              parameter, we can just change the parm type.  */
1389           if (ctype && is_this)
1390             {
1391               parmtype
1392                 = build_qualified_type (ctype,
1393                                         TYPE_QUALS (TREE_TYPE (parmtype)));
1394               parmtype = build_pointer_type (parmtype);
1395             }
1396
1397           t = implicit_conversion (parmtype, argtype, arg, 
1398                                    /*c_cast_p=*/false, flags);
1399         }
1400       else
1401         {
1402           t = build_identity_conv (argtype, arg);
1403           t->ellipsis_p = true;
1404         }
1405
1406       if (t && is_this)
1407         t->this_p = true;
1408
1409       convs[i] = t;
1410       if (! t)
1411         {
1412           viable = 0;
1413           break;
1414         }
1415
1416       if (t->bad_p)
1417         viable = -1;
1418
1419       if (parmnode)
1420         parmnode = TREE_CHAIN (parmnode);
1421       argnode = TREE_CHAIN (argnode);
1422     }
1423
1424  out:
1425   return add_candidate (candidates, fn, orig_arglist, len, convs,
1426                         access_path, conversion_path, viable);
1427 }
1428
1429 /* Create an overload candidate for the conversion function FN which will
1430    be invoked for expression OBJ, producing a pointer-to-function which
1431    will in turn be called with the argument list ARGLIST, and add it to
1432    CANDIDATES.  FLAGS is passed on to implicit_conversion.
1433
1434    Actually, we don't really care about FN; we care about the type it
1435    converts to.  There may be multiple conversion functions that will
1436    convert to that type, and we rely on build_user_type_conversion_1 to
1437    choose the best one; so when we create our candidate, we record the type
1438    instead of the function.  */
1439
1440 static struct z_candidate *
1441 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1442                     tree arglist, tree access_path, tree conversion_path)
1443 {
1444   tree totype = TREE_TYPE (TREE_TYPE (fn));
1445   int i, len, viable, flags;
1446   tree parmlist, parmnode, argnode;
1447   conversion **convs;
1448
1449   for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1450     parmlist = TREE_TYPE (parmlist);
1451   parmlist = TYPE_ARG_TYPES (parmlist);
1452
1453   len = list_length (arglist) + 1;
1454   convs = alloc_conversions (len);
1455   parmnode = parmlist;
1456   argnode = arglist;
1457   viable = 1;
1458   flags = LOOKUP_NORMAL;
1459
1460   /* Don't bother looking up the same type twice.  */
1461   if (*candidates && (*candidates)->fn == totype)
1462     return NULL;
1463
1464   for (i = 0; i < len; ++i)
1465     {
1466       tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1467       tree argtype = lvalue_type (arg);
1468       conversion *t;
1469
1470       if (i == 0)
1471         t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1472                                  flags);
1473       else if (parmnode == void_list_node)
1474         break;
1475       else if (parmnode)
1476         t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, 
1477                                  /*c_cast_p=*/false, flags);
1478       else
1479         {
1480           t = build_identity_conv (argtype, arg);
1481           t->ellipsis_p = true;
1482         }
1483
1484       convs[i] = t;
1485       if (! t)
1486         break;
1487
1488       if (t->bad_p)
1489         viable = -1;
1490
1491       if (i == 0)
1492         continue;
1493
1494       if (parmnode)
1495         parmnode = TREE_CHAIN (parmnode);
1496       argnode = TREE_CHAIN (argnode);
1497     }
1498
1499   if (i < len)
1500     viable = 0;
1501
1502   if (!sufficient_parms_p (parmnode))
1503     viable = 0;
1504
1505   return add_candidate (candidates, totype, arglist, len, convs,
1506                         access_path, conversion_path, viable);
1507 }
1508
1509 static void
1510 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1511                          tree type1, tree type2, tree *args, tree *argtypes,
1512                          int flags)
1513 {
1514   conversion *t;
1515   conversion **convs;
1516   size_t num_convs;
1517   int viable = 1, i;
1518   tree types[2];
1519
1520   types[0] = type1;
1521   types[1] = type2;
1522
1523   num_convs =  args[2] ? 3 : (args[1] ? 2 : 1);
1524   convs = alloc_conversions (num_convs);
1525
1526   for (i = 0; i < 2; ++i)
1527     {
1528       if (! args[i])
1529         break;
1530
1531       t = implicit_conversion (types[i], argtypes[i], args[i], 
1532                                /*c_cast_p=*/false, flags);
1533       if (! t)
1534         {
1535           viable = 0;
1536           /* We need something for printing the candidate.  */
1537           t = build_identity_conv (types[i], NULL_TREE);
1538         }
1539       else if (t->bad_p)
1540         viable = 0;
1541       convs[i] = t;
1542     }
1543
1544   /* For COND_EXPR we rearranged the arguments; undo that now.  */
1545   if (args[2])
1546     {
1547       convs[2] = convs[1];
1548       convs[1] = convs[0];
1549       t = implicit_conversion (boolean_type_node, argtypes[2], args[2], 
1550                                /*c_cast_p=*/false, flags);
1551       if (t)
1552         convs[0] = t;
1553       else
1554         viable = 0;
1555     }
1556
1557   add_candidate (candidates, fnname, /*args=*/NULL_TREE,
1558                  num_convs, convs,
1559                  /*access_path=*/NULL_TREE,
1560                  /*conversion_path=*/NULL_TREE,
1561                  viable);
1562 }
1563
1564 static bool
1565 is_complete (tree t)
1566 {
1567   return COMPLETE_TYPE_P (complete_type (t));
1568 }
1569
1570 /* Returns nonzero if TYPE is a promoted arithmetic type.  */
1571
1572 static bool
1573 promoted_arithmetic_type_p (tree type)
1574 {
1575   /* [over.built]
1576
1577      In this section, the term promoted integral type is used to refer
1578      to those integral types which are preserved by integral promotion
1579      (including e.g.  int and long but excluding e.g.  char).
1580      Similarly, the term promoted arithmetic type refers to promoted
1581      integral types plus floating types.  */
1582   return ((INTEGRAL_TYPE_P (type)
1583            && same_type_p (type_promotes_to (type), type))
1584           || TREE_CODE (type) == REAL_TYPE);
1585 }
1586
1587 /* Create any builtin operator overload candidates for the operator in
1588    question given the converted operand types TYPE1 and TYPE2.  The other
1589    args are passed through from add_builtin_candidates to
1590    build_builtin_candidate.
1591
1592    TYPE1 and TYPE2 may not be permissible, and we must filter them.
1593    If CODE is requires candidates operands of the same type of the kind
1594    of which TYPE1 and TYPE2 are, we add both candidates
1595    CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2).  */
1596
1597 static void
1598 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1599                        enum tree_code code2, tree fnname, tree type1,
1600                        tree type2, tree *args, tree *argtypes, int flags)
1601 {
1602   switch (code)
1603     {
1604     case POSTINCREMENT_EXPR:
1605     case POSTDECREMENT_EXPR:
1606       args[1] = integer_zero_node;
1607       type2 = integer_type_node;
1608       break;
1609     default:
1610       break;
1611     }
1612
1613   switch (code)
1614     {
1615
1616 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
1617      and  VQ  is  either  volatile or empty, there exist candidate operator
1618      functions of the form
1619              VQ T&   operator++(VQ T&);
1620              T       operator++(VQ T&, int);
1621    5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1622      type  other than bool, and VQ is either volatile or empty, there exist
1623      candidate operator functions of the form
1624              VQ T&   operator--(VQ T&);
1625              T       operator--(VQ T&, int);
1626    6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
1627      complete  object type, and VQ is either volatile or empty, there exist
1628      candidate operator functions of the form
1629              T*VQ&   operator++(T*VQ&);
1630              T*VQ&   operator--(T*VQ&);
1631              T*      operator++(T*VQ&, int);
1632              T*      operator--(T*VQ&, int);  */
1633
1634     case POSTDECREMENT_EXPR:
1635     case PREDECREMENT_EXPR:
1636       if (TREE_CODE (type1) == BOOLEAN_TYPE)
1637         return;
1638     case POSTINCREMENT_EXPR:
1639     case PREINCREMENT_EXPR:
1640       if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1641         {
1642           type1 = build_reference_type (type1);
1643           break;
1644         }
1645       return;
1646
1647 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1648      exist candidate operator functions of the form
1649
1650              T&      operator*(T*);
1651
1652    8 For every function type T, there exist candidate operator functions of
1653      the form
1654              T&      operator*(T*);  */
1655
1656     case INDIRECT_REF:
1657       if (TREE_CODE (type1) == POINTER_TYPE
1658           && (TYPE_PTROB_P (type1)
1659               || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1660         break;
1661       return;
1662
1663 /* 9 For every type T, there exist candidate operator functions of the form
1664              T*      operator+(T*);
1665
1666    10For  every  promoted arithmetic type T, there exist candidate operator
1667      functions of the form
1668              T       operator+(T);
1669              T       operator-(T);  */
1670
1671     case UNARY_PLUS_EXPR: /* unary + */
1672       if (TREE_CODE (type1) == POINTER_TYPE)
1673         break;
1674     case NEGATE_EXPR:
1675       if (ARITHMETIC_TYPE_P (type1))
1676         break;
1677       return;
1678
1679 /* 11For every promoted integral type T,  there  exist  candidate  operator
1680      functions of the form
1681              T       operator~(T);  */
1682
1683     case BIT_NOT_EXPR:
1684       if (INTEGRAL_TYPE_P (type1))
1685         break;
1686       return;
1687
1688 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1689      is the same type as C2 or is a derived class of C2, T  is  a  complete
1690      object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1691      there exist candidate operator functions of the form
1692              CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1693      where CV12 is the union of CV1 and CV2.  */
1694
1695     case MEMBER_REF:
1696       if (TREE_CODE (type1) == POINTER_TYPE
1697           && TYPE_PTR_TO_MEMBER_P (type2))
1698         {
1699           tree c1 = TREE_TYPE (type1);
1700           tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1701
1702           if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
1703               && (TYPE_PTRMEMFUNC_P (type2)
1704                   || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
1705             break;
1706         }
1707       return;
1708
1709 /* 13For every pair of promoted arithmetic types L and R, there exist  can-
1710      didate operator functions of the form
1711              LR      operator*(L, R);
1712              LR      operator/(L, R);
1713              LR      operator+(L, R);
1714              LR      operator-(L, R);
1715              bool    operator<(L, R);
1716              bool    operator>(L, R);
1717              bool    operator<=(L, R);
1718              bool    operator>=(L, R);
1719              bool    operator==(L, R);
1720              bool    operator!=(L, R);
1721      where  LR  is  the  result of the usual arithmetic conversions between
1722      types L and R.
1723
1724    14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
1725      unqualified  complete  object  type and I is a promoted integral type,
1726      there exist candidate operator functions of the form
1727              T*      operator+(T*, I);
1728              T&      operator[](T*, I);
1729              T*      operator-(T*, I);
1730              T*      operator+(I, T*);
1731              T&      operator[](I, T*);
1732
1733    15For every T, where T is a pointer to complete object type, there exist
1734      candidate operator functions of the form112)
1735              ptrdiff_t operator-(T, T);
1736
1737    16For every pointer or enumeration type T, there exist candidate operator
1738      functions of the form
1739              bool    operator<(T, T);
1740              bool    operator>(T, T);
1741              bool    operator<=(T, T);
1742              bool    operator>=(T, T);
1743              bool    operator==(T, T);
1744              bool    operator!=(T, T);
1745
1746    17For every pointer to member type T,  there  exist  candidate  operator
1747      functions of the form
1748              bool    operator==(T, T);
1749              bool    operator!=(T, T);  */
1750
1751     case MINUS_EXPR:
1752       if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1753         break;
1754       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1755         {
1756           type2 = ptrdiff_type_node;
1757           break;
1758         }
1759     case MULT_EXPR:
1760     case TRUNC_DIV_EXPR:
1761       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1762         break;
1763       return;
1764
1765     case EQ_EXPR:
1766     case NE_EXPR:
1767       if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1768           || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1769         break;
1770       if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
1771         {
1772           type2 = type1;
1773           break;
1774         }
1775       if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
1776         {
1777           type1 = type2;
1778           break;
1779         }
1780       /* Fall through.  */
1781     case LT_EXPR:
1782     case GT_EXPR:
1783     case LE_EXPR:
1784     case GE_EXPR:
1785     case MAX_EXPR:
1786     case MIN_EXPR:
1787       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1788         break;
1789       if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1790         break;
1791       if (TREE_CODE (type1) == ENUMERAL_TYPE && TREE_CODE (type2) == ENUMERAL_TYPE)
1792         break;
1793       if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
1794         {
1795           type2 = type1;
1796           break;
1797         }
1798       if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
1799         {
1800           type1 = type2;
1801           break;
1802         }
1803       return;
1804
1805     case PLUS_EXPR:
1806       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1807         break;
1808     case ARRAY_REF:
1809       if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
1810         {
1811           type1 = ptrdiff_type_node;
1812           break;
1813         }
1814       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1815         {
1816           type2 = ptrdiff_type_node;
1817           break;
1818         }
1819       return;
1820
1821 /* 18For  every pair of promoted integral types L and R, there exist candi-
1822      date operator functions of the form
1823              LR      operator%(L, R);
1824              LR      operator&(L, R);
1825              LR      operator^(L, R);
1826              LR      operator|(L, R);
1827              L       operator<<(L, R);
1828              L       operator>>(L, R);
1829      where LR is the result of the  usual  arithmetic  conversions  between
1830      types L and R.  */
1831
1832     case TRUNC_MOD_EXPR:
1833     case BIT_AND_EXPR:
1834     case BIT_IOR_EXPR:
1835     case BIT_XOR_EXPR:
1836     case LSHIFT_EXPR:
1837     case RSHIFT_EXPR:
1838       if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1839         break;
1840       return;
1841
1842 /* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
1843      type, VQ is either volatile or empty, and R is a  promoted  arithmetic
1844      type, there exist candidate operator functions of the form
1845              VQ L&   operator=(VQ L&, R);
1846              VQ L&   operator*=(VQ L&, R);
1847              VQ L&   operator/=(VQ L&, R);
1848              VQ L&   operator+=(VQ L&, R);
1849              VQ L&   operator-=(VQ L&, R);
1850
1851    20For  every  pair T, VQ), where T is any type and VQ is either volatile
1852      or empty, there exist candidate operator functions of the form
1853              T*VQ&   operator=(T*VQ&, T*);
1854
1855    21For every pair T, VQ), where T is a pointer to member type and  VQ  is
1856      either  volatile or empty, there exist candidate operator functions of
1857      the form
1858              VQ T&   operator=(VQ T&, T);
1859
1860    22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
1861      unqualified  complete object type, VQ is either volatile or empty, and
1862      I is a promoted integral type, there exist  candidate  operator  func-
1863      tions of the form
1864              T*VQ&   operator+=(T*VQ&, I);
1865              T*VQ&   operator-=(T*VQ&, I);
1866
1867    23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
1868      type, VQ is either volatile or empty, and R  is  a  promoted  integral
1869      type, there exist candidate operator functions of the form
1870
1871              VQ L&   operator%=(VQ L&, R);
1872              VQ L&   operator<<=(VQ L&, R);
1873              VQ L&   operator>>=(VQ L&, R);
1874              VQ L&   operator&=(VQ L&, R);
1875              VQ L&   operator^=(VQ L&, R);
1876              VQ L&   operator|=(VQ L&, R);  */
1877
1878     case MODIFY_EXPR:
1879       switch (code2)
1880         {
1881         case PLUS_EXPR:
1882         case MINUS_EXPR:
1883           if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1884             {
1885               type2 = ptrdiff_type_node;
1886               break;
1887             }
1888         case MULT_EXPR:
1889         case TRUNC_DIV_EXPR:
1890           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1891             break;
1892           return;
1893
1894         case TRUNC_MOD_EXPR:
1895         case BIT_AND_EXPR:
1896         case BIT_IOR_EXPR:
1897         case BIT_XOR_EXPR:
1898         case LSHIFT_EXPR:
1899         case RSHIFT_EXPR:
1900           if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1901             break;
1902           return;
1903
1904         case NOP_EXPR:
1905           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1906             break;
1907           if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1908               || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1909               || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1910               || ((TYPE_PTRMEMFUNC_P (type1)
1911                    || TREE_CODE (type1) == POINTER_TYPE)
1912                   && null_ptr_cst_p (args[1])))
1913             {
1914               type2 = type1;
1915               break;
1916             }
1917           return;
1918
1919         default:
1920           gcc_unreachable ();
1921         }
1922       type1 = build_reference_type (type1);
1923       break;
1924
1925     case COND_EXPR:
1926       /* [over.built]
1927
1928          For every pair of promoted arithmetic types L and R, there
1929          exist candidate operator functions of the form
1930
1931          LR operator?(bool, L, R);
1932
1933          where LR is the result of the usual arithmetic conversions
1934          between types L and R.
1935
1936          For every type T, where T is a pointer or pointer-to-member
1937          type, there exist candidate operator functions of the form T
1938          operator?(bool, T, T);  */
1939
1940       if (promoted_arithmetic_type_p (type1)
1941           && promoted_arithmetic_type_p (type2))
1942         /* That's OK.  */
1943         break;
1944
1945       /* Otherwise, the types should be pointers.  */
1946       if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
1947           || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
1948         return;
1949
1950       /* We don't check that the two types are the same; the logic
1951          below will actually create two candidates; one in which both
1952          parameter types are TYPE1, and one in which both parameter
1953          types are TYPE2.  */
1954       break;
1955
1956     default:
1957       gcc_unreachable ();
1958     }
1959
1960   /* If we're dealing with two pointer types or two enumeral types,
1961      we need candidates for both of them.  */
1962   if (type2 && !same_type_p (type1, type2)
1963       && TREE_CODE (type1) == TREE_CODE (type2)
1964       && (TREE_CODE (type1) == REFERENCE_TYPE
1965           || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1966           || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1967           || TYPE_PTRMEMFUNC_P (type1)
1968           || IS_AGGR_TYPE (type1)
1969           || TREE_CODE (type1) == ENUMERAL_TYPE))
1970     {
1971       build_builtin_candidate
1972         (candidates, fnname, type1, type1, args, argtypes, flags);
1973       build_builtin_candidate
1974         (candidates, fnname, type2, type2, args, argtypes, flags);
1975       return;
1976     }
1977
1978   build_builtin_candidate
1979     (candidates, fnname, type1, type2, args, argtypes, flags);
1980 }
1981
1982 tree
1983 type_decays_to (tree type)
1984 {
1985   if (TREE_CODE (type) == ARRAY_TYPE)
1986     return build_pointer_type (TREE_TYPE (type));
1987   if (TREE_CODE (type) == FUNCTION_TYPE)
1988     return build_pointer_type (type);
1989   return type;
1990 }
1991
1992 /* There are three conditions of builtin candidates:
1993
1994    1) bool-taking candidates.  These are the same regardless of the input.
1995    2) pointer-pair taking candidates.  These are generated for each type
1996       one of the input types converts to.
1997    3) arithmetic candidates.  According to the standard, we should generate
1998       all of these, but I'm trying not to...
1999
2000    Here we generate a superset of the possible candidates for this particular
2001    case.  That is a subset of the full set the standard defines, plus some
2002    other cases which the standard disallows. add_builtin_candidate will
2003    filter out the invalid set.  */
2004
2005 static void
2006 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2007                         enum tree_code code2, tree fnname, tree *args,
2008                         int flags)
2009 {
2010   int ref1, i;
2011   int enum_p = 0;
2012   tree type, argtypes[3];
2013   /* TYPES[i] is the set of possible builtin-operator parameter types
2014      we will consider for the Ith argument.  These are represented as
2015      a TREE_LIST; the TREE_VALUE of each node is the potential
2016      parameter type.  */
2017   tree types[2];
2018
2019   for (i = 0; i < 3; ++i)
2020     {
2021       if (args[i])
2022         argtypes[i]  = lvalue_type (args[i]);
2023       else
2024         argtypes[i] = NULL_TREE;
2025     }
2026
2027   switch (code)
2028     {
2029 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2030      and  VQ  is  either  volatile or empty, there exist candidate operator
2031      functions of the form
2032                  VQ T&   operator++(VQ T&);  */
2033
2034     case POSTINCREMENT_EXPR:
2035     case PREINCREMENT_EXPR:
2036     case POSTDECREMENT_EXPR:
2037     case PREDECREMENT_EXPR:
2038     case MODIFY_EXPR:
2039       ref1 = 1;
2040       break;
2041
2042 /* 24There also exist candidate operator functions of the form
2043              bool    operator!(bool);
2044              bool    operator&&(bool, bool);
2045              bool    operator||(bool, bool);  */
2046
2047     case TRUTH_NOT_EXPR:
2048       build_builtin_candidate
2049         (candidates, fnname, boolean_type_node,
2050          NULL_TREE, args, argtypes, flags);
2051       return;
2052
2053     case TRUTH_ORIF_EXPR:
2054     case TRUTH_ANDIF_EXPR:
2055       build_builtin_candidate
2056         (candidates, fnname, boolean_type_node,
2057          boolean_type_node, args, argtypes, flags);
2058       return;
2059
2060     case ADDR_EXPR:
2061     case COMPOUND_EXPR:
2062     case COMPONENT_REF:
2063       return;
2064
2065     case COND_EXPR:
2066     case EQ_EXPR:
2067     case NE_EXPR:
2068     case LT_EXPR:
2069     case LE_EXPR:
2070     case GT_EXPR:
2071     case GE_EXPR:
2072       enum_p = 1;
2073       /* Fall through.  */
2074
2075     default:
2076       ref1 = 0;
2077     }
2078
2079   types[0] = types[1] = NULL_TREE;
2080
2081   for (i = 0; i < 2; ++i)
2082     {
2083       if (! args[i])
2084         ;
2085       else if (IS_AGGR_TYPE (argtypes[i]))
2086         {
2087           tree convs;
2088
2089           if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2090             return;
2091
2092           convs = lookup_conversions (argtypes[i]);
2093
2094           if (code == COND_EXPR)
2095             {
2096               if (real_lvalue_p (args[i]))
2097                 types[i] = tree_cons
2098                   (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2099
2100               types[i] = tree_cons
2101                 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2102             }
2103
2104           else if (! convs)
2105             return;
2106
2107           for (; convs; convs = TREE_CHAIN (convs))
2108             {
2109               type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2110
2111               if (i == 0 && ref1
2112                   && (TREE_CODE (type) != REFERENCE_TYPE
2113                       || CP_TYPE_CONST_P (TREE_TYPE (type))))
2114                 continue;
2115
2116               if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2117                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2118
2119               type = non_reference (type);
2120               if (i != 0 || ! ref1)
2121                 {
2122                   type = TYPE_MAIN_VARIANT (type_decays_to (type));
2123                   if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2124                     types[i] = tree_cons (NULL_TREE, type, types[i]);
2125                   if (INTEGRAL_TYPE_P (type))
2126                     type = type_promotes_to (type);
2127                 }
2128
2129               if (! value_member (type, types[i]))
2130                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2131             }
2132         }
2133       else
2134         {
2135           if (code == COND_EXPR && real_lvalue_p (args[i]))
2136             types[i] = tree_cons
2137               (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2138           type = non_reference (argtypes[i]);
2139           if (i != 0 || ! ref1)
2140             {
2141               type = TYPE_MAIN_VARIANT (type_decays_to (type));
2142               if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2143                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2144               if (INTEGRAL_TYPE_P (type))
2145                 type = type_promotes_to (type);
2146             }
2147           types[i] = tree_cons (NULL_TREE, type, types[i]);
2148         }
2149     }
2150
2151   /* Run through the possible parameter types of both arguments,
2152      creating candidates with those parameter types.  */
2153   for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2154     {
2155       if (types[1])
2156         for (type = types[1]; type; type = TREE_CHAIN (type))
2157           add_builtin_candidate
2158             (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2159              TREE_VALUE (type), args, argtypes, flags);
2160       else
2161         add_builtin_candidate
2162           (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2163            NULL_TREE, args, argtypes, flags);
2164     }
2165
2166   return;
2167 }
2168
2169
2170 /* If TMPL can be successfully instantiated as indicated by
2171    EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2172
2173    TMPL is the template.  EXPLICIT_TARGS are any explicit template
2174    arguments.  ARGLIST is the arguments provided at the call-site.
2175    The RETURN_TYPE is the desired type for conversion operators.  If
2176    OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2177    If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2178    add_conv_candidate.  */
2179
2180 static struct z_candidate*
2181 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2182                              tree ctype, tree explicit_targs, tree arglist,
2183                              tree return_type, tree access_path,
2184                              tree conversion_path, int flags, tree obj,
2185                              unification_kind_t strict)
2186 {
2187   int ntparms = DECL_NTPARMS (tmpl);
2188   tree targs = make_tree_vec (ntparms);
2189   tree args_without_in_chrg = arglist;
2190   struct z_candidate *cand;
2191   int i;
2192   tree fn;
2193
2194   /* We don't do deduction on the in-charge parameter, the VTT
2195      parameter or 'this'.  */
2196   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2197     args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2198
2199   if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2200        || DECL_BASE_CONSTRUCTOR_P (tmpl))
2201       && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2202     args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2203
2204   i = fn_type_unification (tmpl, explicit_targs, targs,
2205                            args_without_in_chrg,
2206                            return_type, strict);
2207
2208   if (i != 0)
2209     return NULL;
2210
2211   fn = instantiate_template (tmpl, targs, tf_none);
2212   if (fn == error_mark_node)
2213     return NULL;
2214
2215   /* In [class.copy]:
2216
2217        A member function template is never instantiated to perform the
2218        copy of a class object to an object of its class type.
2219
2220      It's a little unclear what this means; the standard explicitly
2221      does allow a template to be used to copy a class.  For example,
2222      in:
2223
2224        struct A {
2225          A(A&);
2226          template <class T> A(const T&);
2227        };
2228        const A f ();
2229        void g () { A a (f ()); }
2230
2231      the member template will be used to make the copy.  The section
2232      quoted above appears in the paragraph that forbids constructors
2233      whose only parameter is (a possibly cv-qualified variant of) the
2234      class type, and a logical interpretation is that the intent was
2235      to forbid the instantiation of member templates which would then
2236      have that form.  */
2237   if (DECL_CONSTRUCTOR_P (fn) && list_length (arglist) == 2)
2238     {
2239       tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2240       if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2241                                     ctype))
2242         return NULL;
2243     }
2244
2245   if (obj != NULL_TREE)
2246     /* Aha, this is a conversion function.  */
2247     cand = add_conv_candidate (candidates, fn, obj, access_path,
2248                                conversion_path, arglist);
2249   else
2250     cand = add_function_candidate (candidates, fn, ctype,
2251                                    arglist, access_path,
2252                                    conversion_path, flags);
2253   if (DECL_TI_TEMPLATE (fn) != tmpl)
2254     /* This situation can occur if a member template of a template
2255        class is specialized.  Then, instantiate_template might return
2256        an instantiation of the specialization, in which case the
2257        DECL_TI_TEMPLATE field will point at the original
2258        specialization.  For example:
2259
2260          template <class T> struct S { template <class U> void f(U);
2261                                        template <> void f(int) {}; };
2262          S<double> sd;
2263          sd.f(3);
2264
2265        Here, TMPL will be template <class U> S<double>::f(U).
2266        And, instantiate template will give us the specialization
2267        template <> S<double>::f(int).  But, the DECL_TI_TEMPLATE field
2268        for this will point at template <class T> template <> S<T>::f(int),
2269        so that we can find the definition.  For the purposes of
2270        overload resolution, however, we want the original TMPL.  */
2271     cand->template_decl = tree_cons (tmpl, targs, NULL_TREE);
2272   else
2273     cand->template_decl = DECL_TEMPLATE_INFO (fn);
2274
2275   return cand;
2276 }
2277
2278
2279 static struct z_candidate *
2280 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2281                         tree explicit_targs, tree arglist, tree return_type,
2282                         tree access_path, tree conversion_path, int flags,
2283                         unification_kind_t strict)
2284 {
2285   return
2286     add_template_candidate_real (candidates, tmpl, ctype,
2287                                  explicit_targs, arglist, return_type,
2288                                  access_path, conversion_path,
2289                                  flags, NULL_TREE, strict);
2290 }
2291
2292
2293 static struct z_candidate *
2294 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2295                              tree obj, tree arglist, tree return_type,
2296                              tree access_path, tree conversion_path)
2297 {
2298   return
2299     add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2300                                  arglist, return_type, access_path,
2301                                  conversion_path, 0, obj, DEDUCE_CONV);
2302 }
2303
2304 /* The CANDS are the set of candidates that were considered for
2305    overload resolution.  Return the set of viable candidates.  If none
2306    of the candidates were viable, set *ANY_VIABLE_P to true.  STRICT_P
2307    is true if a candidate should be considered viable only if it is
2308    strictly viable.  */
2309
2310 static struct z_candidate*
2311 splice_viable (struct z_candidate *cands,
2312                bool strict_p,
2313                bool *any_viable_p)
2314 {
2315   struct z_candidate *viable;
2316   struct z_candidate **last_viable;
2317   struct z_candidate **cand;
2318
2319   viable = NULL;
2320   last_viable = &viable;
2321   *any_viable_p = false;
2322
2323   cand = &cands;
2324   while (*cand)
2325     {
2326       struct z_candidate *c = *cand;
2327       if (strict_p ? c->viable == 1 : c->viable)
2328         {
2329           *last_viable = c;
2330           *cand = c->next;
2331           c->next = NULL;
2332           last_viable = &c->next;
2333           *any_viable_p = true;
2334         }
2335       else
2336         cand = &c->next;
2337     }
2338
2339   return viable ? viable : cands;
2340 }
2341
2342 static bool
2343 any_strictly_viable (struct z_candidate *cands)
2344 {
2345   for (; cands; cands = cands->next)
2346     if (cands->viable == 1)
2347       return true;
2348   return false;
2349 }
2350
2351 /* OBJ is being used in an expression like "OBJ.f (...)".  In other
2352    words, it is about to become the "this" pointer for a member
2353    function call.  Take the address of the object.  */
2354
2355 static tree
2356 build_this (tree obj)
2357 {
2358   /* In a template, we are only concerned about the type of the
2359      expression, so we can take a shortcut.  */
2360   if (processing_template_decl)
2361     return build_address (obj);
2362
2363   return build_unary_op (ADDR_EXPR, obj, 0);
2364 }
2365
2366 /* Returns true iff functions are equivalent. Equivalent functions are
2367    not '==' only if one is a function-local extern function or if
2368    both are extern "C".  */
2369
2370 static inline int
2371 equal_functions (tree fn1, tree fn2)
2372 {
2373   if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2374       || DECL_EXTERN_C_FUNCTION_P (fn1))
2375     return decls_match (fn1, fn2);
2376   return fn1 == fn2;
2377 }
2378
2379 /* Print information about one overload candidate CANDIDATE.  MSGSTR
2380    is the text to print before the candidate itself.
2381
2382    NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2383    to have been run through gettext by the caller.  This wart makes
2384    life simpler in print_z_candidates and for the translators.  */
2385
2386 static void
2387 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2388 {
2389   if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2390     {
2391       if (candidate->num_convs == 3)
2392         inform ("%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2393                 candidate->convs[0]->type,
2394                 candidate->convs[1]->type,
2395                 candidate->convs[2]->type);
2396       else if (candidate->num_convs == 2)
2397         inform ("%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2398                 candidate->convs[0]->type,
2399                 candidate->convs[1]->type);
2400       else
2401         inform ("%s %D(%T) <built-in>", msgstr, candidate->fn,
2402                 candidate->convs[0]->type);
2403     }
2404   else if (TYPE_P (candidate->fn))
2405     inform ("%s %T <conversion>", msgstr, candidate->fn);
2406   else if (candidate->viable == -1)
2407     inform ("%s %+#D <near match>", msgstr, candidate->fn);
2408   else
2409     inform ("%s %+#D", msgstr, candidate->fn);
2410 }
2411
2412 static void
2413 print_z_candidates (struct z_candidate *candidates)
2414 {
2415   const char *str;
2416   struct z_candidate *cand1;
2417   struct z_candidate **cand2;
2418
2419   /* There may be duplicates in the set of candidates.  We put off
2420      checking this condition as long as possible, since we have no way
2421      to eliminate duplicates from a set of functions in less than n^2
2422      time.  Now we are about to emit an error message, so it is more
2423      permissible to go slowly.  */
2424   for (cand1 = candidates; cand1; cand1 = cand1->next)
2425     {
2426       tree fn = cand1->fn;
2427       /* Skip builtin candidates and conversion functions.  */
2428       if (TREE_CODE (fn) != FUNCTION_DECL)
2429         continue;
2430       cand2 = &cand1->next;
2431       while (*cand2)
2432         {
2433           if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2434               && equal_functions (fn, (*cand2)->fn))
2435             *cand2 = (*cand2)->next;
2436           else
2437             cand2 = &(*cand2)->next;
2438         }
2439     }
2440
2441   if (!candidates)
2442     return;
2443
2444   str = _("candidates are:");
2445   print_z_candidate (str, candidates);
2446   if (candidates->next)
2447     {
2448       /* Indent successive candidates by the width of the translation
2449          of the above string.  */
2450       size_t len = gcc_gettext_width (str) + 1;
2451       char *spaces = alloca (len);
2452       memset (spaces, ' ', len-1);
2453       spaces[len - 1] = '\0';
2454
2455       candidates = candidates->next;
2456       do
2457         {
2458           print_z_candidate (spaces, candidates);
2459           candidates = candidates->next;
2460         }
2461       while (candidates);
2462     }
2463 }
2464
2465 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2466    USER_CONV.  STD_SEQ is the standard conversion sequence applied to
2467    the result of the conversion function to convert it to the final
2468    desired type.  Merge the two sequences into a single sequence,
2469    and return the merged sequence.  */
2470
2471 static conversion *
2472 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2473 {
2474   conversion **t;
2475
2476   gcc_assert (user_seq->kind == ck_user);
2477
2478   /* Find the end of the second conversion sequence.  */
2479   t = &(std_seq);
2480   while ((*t)->kind != ck_identity)
2481     t = &((*t)->u.next);
2482
2483   /* Replace the identity conversion with the user conversion
2484      sequence.  */
2485   *t = user_seq;
2486
2487   /* The entire sequence is a user-conversion sequence.  */
2488   std_seq->user_conv_p = true;
2489
2490   return std_seq;
2491 }
2492
2493 /* Returns the best overload candidate to perform the requested
2494    conversion.  This function is used for three the overloading situations
2495    described in [over.match.copy], [over.match.conv], and [over.match.ref].
2496    If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2497    per [dcl.init.ref], so we ignore temporary bindings.  */
2498
2499 static struct z_candidate *
2500 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2501 {
2502   struct z_candidate *candidates, *cand;
2503   tree fromtype = TREE_TYPE (expr);
2504   tree ctors = NULL_TREE;
2505   tree conv_fns = NULL_TREE;
2506   conversion *conv = NULL;
2507   tree args = NULL_TREE;
2508   bool any_viable_p;
2509
2510   /* We represent conversion within a hierarchy using RVALUE_CONV and
2511      BASE_CONV, as specified by [over.best.ics]; these become plain
2512      constructor calls, as specified in [dcl.init].  */
2513   gcc_assert (!IS_AGGR_TYPE (fromtype) || !IS_AGGR_TYPE (totype)
2514               || !DERIVED_FROM_P (totype, fromtype));
2515
2516   if (IS_AGGR_TYPE (totype))
2517     ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2518
2519   if (IS_AGGR_TYPE (fromtype))
2520     conv_fns = lookup_conversions (fromtype);
2521
2522   candidates = 0;
2523   flags |= LOOKUP_NO_CONVERSION;
2524
2525   if (ctors)
2526     {
2527       tree t;
2528
2529       ctors = BASELINK_FUNCTIONS (ctors);
2530
2531       t = build_int_cst (build_pointer_type (totype), 0);
2532       args = build_tree_list (NULL_TREE, expr);
2533       /* We should never try to call the abstract or base constructor
2534          from here.  */
2535       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2536                   && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2537       args = tree_cons (NULL_TREE, t, args);
2538     }
2539   for (; ctors; ctors = OVL_NEXT (ctors))
2540     {
2541       tree ctor = OVL_CURRENT (ctors);
2542       if (DECL_NONCONVERTING_P (ctor))
2543         continue;
2544
2545       if (TREE_CODE (ctor) == TEMPLATE_DECL)
2546         cand = add_template_candidate (&candidates, ctor, totype,
2547                                        NULL_TREE, args, NULL_TREE,
2548                                        TYPE_BINFO (totype),
2549                                        TYPE_BINFO (totype),
2550                                        flags,
2551                                        DEDUCE_CALL);
2552       else
2553         cand = add_function_candidate (&candidates, ctor, totype,
2554                                        args, TYPE_BINFO (totype),
2555                                        TYPE_BINFO (totype),
2556                                        flags);
2557
2558       if (cand)
2559         cand->second_conv = build_identity_conv (totype, NULL_TREE);
2560     }
2561
2562   if (conv_fns)
2563     args = build_tree_list (NULL_TREE, build_this (expr));
2564
2565   for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
2566     {
2567       tree fns;
2568       tree conversion_path = TREE_PURPOSE (conv_fns);
2569       int convflags = LOOKUP_NO_CONVERSION;
2570
2571       /* If we are called to convert to a reference type, we are trying to
2572          find an lvalue binding, so don't even consider temporaries.  If
2573          we don't find an lvalue binding, the caller will try again to
2574          look for a temporary binding.  */
2575       if (TREE_CODE (totype) == REFERENCE_TYPE)
2576         convflags |= LOOKUP_NO_TEMP_BIND;
2577
2578       for (fns = TREE_VALUE (conv_fns); fns; fns = OVL_NEXT (fns))
2579         {
2580           tree fn = OVL_CURRENT (fns);
2581
2582           /* [over.match.funcs] For conversion functions, the function
2583              is considered to be a member of the class of the implicit
2584              object argument for the purpose of defining the type of
2585              the implicit object parameter.
2586
2587              So we pass fromtype as CTYPE to add_*_candidate.  */
2588
2589           if (TREE_CODE (fn) == TEMPLATE_DECL)
2590             cand = add_template_candidate (&candidates, fn, fromtype,
2591                                            NULL_TREE,
2592                                            args, totype,
2593                                            TYPE_BINFO (fromtype),
2594                                            conversion_path,
2595                                            flags,
2596                                            DEDUCE_CONV);
2597           else
2598             cand = add_function_candidate (&candidates, fn, fromtype,
2599                                            args,
2600                                            TYPE_BINFO (fromtype),
2601                                            conversion_path,
2602                                            flags);
2603
2604           if (cand)
2605             {
2606               conversion *ics
2607                 = implicit_conversion (totype,
2608                                        TREE_TYPE (TREE_TYPE (cand->fn)),
2609                                        0, 
2610                                        /*c_cast_p=*/false, convflags);
2611
2612               cand->second_conv = ics;
2613
2614               if (!ics)
2615                 cand->viable = 0;
2616               else if (candidates->viable == 1 && ics->bad_p)
2617                 cand->viable = -1;
2618             }
2619         }
2620     }
2621
2622   candidates = splice_viable (candidates, pedantic, &any_viable_p);
2623   if (!any_viable_p)
2624     return 0;
2625
2626   cand = tourney (candidates);
2627   if (cand == 0)
2628     {
2629       if (flags & LOOKUP_COMPLAIN)
2630         {
2631           error ("conversion from %qT to %qT is ambiguous",
2632                     fromtype, totype);
2633           print_z_candidates (candidates);
2634         }
2635
2636       cand = candidates;        /* any one will do */
2637       cand->second_conv = build_ambiguous_conv (totype, expr);
2638       cand->second_conv->user_conv_p = true;
2639       if (!any_strictly_viable (candidates))
2640         cand->second_conv->bad_p = true;
2641       /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2642          ambiguous conversion is no worse than another user-defined
2643          conversion.  */
2644
2645       return cand;
2646     }
2647
2648   /* Build the user conversion sequence.  */
2649   conv = build_conv
2650     (ck_user,
2651      (DECL_CONSTRUCTOR_P (cand->fn)
2652       ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2653      build_identity_conv (TREE_TYPE (expr), expr));
2654   conv->cand = cand;
2655
2656   /* Combine it with the second conversion sequence.  */
2657   cand->second_conv = merge_conversion_sequences (conv,
2658                                                   cand->second_conv);
2659
2660   if (cand->viable == -1)
2661     cand->second_conv->bad_p = true;
2662
2663   return cand;
2664 }
2665
2666 tree
2667 build_user_type_conversion (tree totype, tree expr, int flags)
2668 {
2669   struct z_candidate *cand
2670     = build_user_type_conversion_1 (totype, expr, flags);
2671
2672   if (cand)
2673     {
2674       if (cand->second_conv->kind == ck_ambig)
2675         return error_mark_node;
2676       expr = convert_like (cand->second_conv, expr);
2677       return convert_from_reference (expr);
2678     }
2679   return NULL_TREE;
2680 }
2681
2682 /* Do any initial processing on the arguments to a function call.  */
2683
2684 static tree
2685 resolve_args (tree args)
2686 {
2687   tree t;
2688   for (t = args; t; t = TREE_CHAIN (t))
2689     {
2690       tree arg = TREE_VALUE (t);
2691
2692       if (arg == error_mark_node)
2693         return error_mark_node;
2694       else if (VOID_TYPE_P (TREE_TYPE (arg)))
2695         {
2696           error ("invalid use of void expression");
2697           return error_mark_node;
2698         }
2699     }
2700   return args;
2701 }
2702
2703 /* Perform overload resolution on FN, which is called with the ARGS.
2704
2705    Return the candidate function selected by overload resolution, or
2706    NULL if the event that overload resolution failed.  In the case
2707    that overload resolution fails, *CANDIDATES will be the set of
2708    candidates considered, and ANY_VIABLE_P will be set to true or
2709    false to indicate whether or not any of the candidates were
2710    viable.
2711
2712    The ARGS should already have gone through RESOLVE_ARGS before this
2713    function is called.  */
2714
2715 static struct z_candidate *
2716 perform_overload_resolution (tree fn,
2717                              tree args,
2718                              struct z_candidate **candidates,
2719                              bool *any_viable_p)
2720 {
2721   struct z_candidate *cand;
2722   tree explicit_targs = NULL_TREE;
2723   int template_only = 0;
2724
2725   *candidates = NULL;
2726   *any_viable_p = true;
2727
2728   /* Check FN and ARGS.  */
2729   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
2730               || TREE_CODE (fn) == TEMPLATE_DECL
2731               || TREE_CODE (fn) == OVERLOAD
2732               || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
2733   gcc_assert (!args || TREE_CODE (args) == TREE_LIST);
2734
2735   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2736     {
2737       explicit_targs = TREE_OPERAND (fn, 1);
2738       fn = TREE_OPERAND (fn, 0);
2739       template_only = 1;
2740     }
2741
2742   /* Add the various candidate functions.  */
2743   add_candidates (fn, args, explicit_targs, template_only,
2744                   /*conversion_path=*/NULL_TREE,
2745                   /*access_path=*/NULL_TREE,
2746                   LOOKUP_NORMAL,
2747                   candidates);
2748
2749   *candidates = splice_viable (*candidates, pedantic, any_viable_p);
2750   if (!*any_viable_p)
2751     return NULL;
2752
2753   cand = tourney (*candidates);
2754   return cand;
2755 }
2756
2757 /* Return an expression for a call to FN (a namespace-scope function,
2758    or a static member function) with the ARGS.  */
2759
2760 tree
2761 build_new_function_call (tree fn, tree args)
2762 {
2763   struct z_candidate *candidates, *cand;
2764   bool any_viable_p;
2765   void *p;
2766   tree result;
2767
2768   args = resolve_args (args);
2769   if (args == error_mark_node)
2770     return error_mark_node;
2771
2772   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
2773   p = conversion_obstack_alloc (0);
2774
2775   cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
2776
2777   if (!cand)
2778     {
2779       if (!any_viable_p && candidates && ! candidates->next)
2780         return build_function_call (candidates->fn, args);
2781       if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2782         fn = TREE_OPERAND (fn, 0);
2783       if (!any_viable_p)
2784         error ("no matching function for call to %<%D(%A)%>",
2785                DECL_NAME (OVL_CURRENT (fn)), args);
2786       else
2787         error ("call of overloaded %<%D(%A)%> is ambiguous",
2788                DECL_NAME (OVL_CURRENT (fn)), args);
2789       if (candidates)
2790         print_z_candidates (candidates);
2791       result = error_mark_node;
2792     }
2793   else
2794     result = build_over_call (cand, LOOKUP_NORMAL);
2795
2796   /* Free all the conversions we allocated.  */
2797   obstack_free (&conversion_obstack, p);
2798
2799   return result;
2800 }
2801
2802 /* Build a call to a global operator new.  FNNAME is the name of the
2803    operator (either "operator new" or "operator new[]") and ARGS are
2804    the arguments provided.  *SIZE points to the total number of bytes
2805    required by the allocation, and is updated if that is changed here.
2806    *COOKIE_SIZE is non-NULL if a cookie should be used.  If this
2807    function determines that no cookie should be used, after all,
2808    *COOKIE_SIZE is set to NULL_TREE.  */
2809
2810 tree
2811 build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size)
2812 {
2813   tree fns;
2814   struct z_candidate *candidates;
2815   struct z_candidate *cand;
2816   bool any_viable_p;
2817
2818   args = tree_cons (NULL_TREE, *size, args);
2819   args = resolve_args (args);
2820   if (args == error_mark_node)
2821     return args;
2822
2823   /* Based on:
2824
2825        [expr.new]
2826
2827        If this lookup fails to find the name, or if the allocated type
2828        is not a class type, the allocation function's name is looked
2829        up in the global scope.
2830
2831      we disregard block-scope declarations of "operator new".  */
2832   fns = lookup_function_nonclass (fnname, args, /*block_p=*/false);
2833
2834   /* Figure out what function is being called.  */
2835   cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
2836
2837   /* If no suitable function could be found, issue an error message
2838      and give up.  */
2839   if (!cand)
2840     {
2841       if (!any_viable_p)
2842         error ("no matching function for call to %<%D(%A)%>",
2843                DECL_NAME (OVL_CURRENT (fns)), args);
2844       else
2845         error ("call of overloaded %<%D(%A)%> is ambiguous",
2846                DECL_NAME (OVL_CURRENT (fns)), args);
2847       if (candidates)
2848         print_z_candidates (candidates);
2849       return error_mark_node;
2850     }
2851
2852    /* If a cookie is required, add some extra space.  Whether
2853       or not a cookie is required cannot be determined until
2854       after we know which function was called.  */
2855    if (*cookie_size)
2856      {
2857        bool use_cookie = true;
2858        if (!abi_version_at_least (2))
2859          {
2860            tree placement = TREE_CHAIN (args);
2861            /* In G++ 3.2, the check was implemented incorrectly; it
2862               looked at the placement expression, rather than the
2863               type of the function.  */
2864            if (placement && !TREE_CHAIN (placement)
2865                && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
2866                                ptr_type_node))
2867              use_cookie = false;
2868          }
2869        else
2870          {
2871            tree arg_types;
2872
2873            arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
2874            /* Skip the size_t parameter.  */
2875            arg_types = TREE_CHAIN (arg_types);
2876            /* Check the remaining parameters (if any).  */
2877            if (arg_types
2878                && TREE_CHAIN (arg_types) == void_list_node
2879                && same_type_p (TREE_VALUE (arg_types),
2880                                ptr_type_node))
2881              use_cookie = false;
2882          }
2883        /* If we need a cookie, adjust the number of bytes allocated.  */
2884        if (use_cookie)
2885          {
2886            /* Update the total size.  */
2887            *size = size_binop (PLUS_EXPR, *size, *cookie_size);
2888            /* Update the argument list to reflect the adjusted size.  */
2889            TREE_VALUE (args) = *size;
2890          }
2891        else
2892          *cookie_size = NULL_TREE;
2893      }
2894
2895    /* Build the CALL_EXPR.  */
2896    return build_over_call (cand, LOOKUP_NORMAL);
2897 }
2898
2899 static tree
2900 build_object_call (tree obj, tree args)
2901 {
2902   struct z_candidate *candidates = 0, *cand;
2903   tree fns, convs, mem_args = NULL_TREE;
2904   tree type = TREE_TYPE (obj);
2905   bool any_viable_p;
2906   tree result = NULL_TREE;
2907   void *p;
2908
2909   if (TYPE_PTRMEMFUNC_P (type))
2910     {
2911       /* It's no good looking for an overloaded operator() on a
2912          pointer-to-member-function.  */
2913       error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
2914       return error_mark_node;
2915     }
2916
2917   fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
2918   if (fns == error_mark_node)
2919     return error_mark_node;
2920
2921   args = resolve_args (args);
2922
2923   if (args == error_mark_node)
2924     return error_mark_node;
2925
2926   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
2927   p = conversion_obstack_alloc (0);
2928
2929   if (fns)
2930     {
2931       tree base = BINFO_TYPE (BASELINK_BINFO (fns));
2932       mem_args = tree_cons (NULL_TREE, build_this (obj), args);
2933
2934       for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
2935         {
2936           tree fn = OVL_CURRENT (fns);
2937           if (TREE_CODE (fn) == TEMPLATE_DECL)
2938             add_template_candidate (&candidates, fn, base, NULL_TREE,
2939                                     mem_args, NULL_TREE,
2940                                     TYPE_BINFO (type),
2941                                     TYPE_BINFO (type),
2942                                     LOOKUP_NORMAL, DEDUCE_CALL);
2943           else
2944             add_function_candidate
2945               (&candidates, fn, base, mem_args, TYPE_BINFO (type),
2946                TYPE_BINFO (type), LOOKUP_NORMAL);
2947         }
2948     }
2949
2950   convs = lookup_conversions (type);
2951
2952   for (; convs; convs = TREE_CHAIN (convs))
2953     {
2954       tree fns = TREE_VALUE (convs);
2955       tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
2956
2957       if ((TREE_CODE (totype) == POINTER_TYPE
2958            && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
2959           || (TREE_CODE (totype) == REFERENCE_TYPE
2960               && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
2961           || (TREE_CODE (totype) == REFERENCE_TYPE
2962               && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
2963               && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
2964         for (; fns; fns = OVL_NEXT (fns))
2965           {
2966             tree fn = OVL_CURRENT (fns);
2967             if (TREE_CODE (fn) == TEMPLATE_DECL)
2968               add_template_conv_candidate
2969                 (&candidates, fn, obj, args, totype,
2970                  /*access_path=*/NULL_TREE,
2971                  /*conversion_path=*/NULL_TREE);
2972             else
2973               add_conv_candidate (&candidates, fn, obj, args,
2974                                   /*conversion_path=*/NULL_TREE,
2975                                   /*access_path=*/NULL_TREE);
2976           }
2977     }
2978
2979   candidates = splice_viable (candidates, pedantic, &any_viable_p);
2980   if (!any_viable_p)
2981     {
2982       error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj), args);
2983       print_z_candidates (candidates);
2984       result = error_mark_node;
2985     }
2986   else
2987     {
2988       cand = tourney (candidates);
2989       if (cand == 0)
2990         {
2991           error ("call of %<(%T) (%A)%> is ambiguous", TREE_TYPE (obj), args);
2992           print_z_candidates (candidates);
2993           result = error_mark_node;
2994         }
2995       /* Since cand->fn will be a type, not a function, for a conversion
2996          function, we must be careful not to unconditionally look at
2997          DECL_NAME here.  */
2998       else if (TREE_CODE (cand->fn) == FUNCTION_DECL
2999                && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3000         result = build_over_call (cand, LOOKUP_NORMAL);
3001       else
3002         {
3003           obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1);
3004           obj = convert_from_reference (obj);
3005           result = build_function_call (obj, args);
3006         }
3007     }
3008
3009   /* Free all the conversions we allocated.  */
3010   obstack_free (&conversion_obstack, p);
3011
3012   return result;
3013 }
3014
3015 static void
3016 op_error (enum tree_code code, enum tree_code code2,
3017           tree arg1, tree arg2, tree arg3, const char *problem)
3018 {
3019   const char *opname;
3020
3021   if (code == MODIFY_EXPR)
3022     opname = assignment_operator_name_info[code2].name;
3023   else
3024     opname = operator_name_info[code].name;
3025
3026   switch (code)
3027     {
3028     case COND_EXPR:
3029       error ("%s for ternary %<operator?:%> in %<%E ? %E : %E%>",
3030              problem, arg1, arg2, arg3);
3031       break;
3032
3033     case POSTINCREMENT_EXPR:
3034     case POSTDECREMENT_EXPR:
3035       error ("%s for %<operator%s%> in %<%E%s%>", problem, opname, arg1, opname);
3036       break;
3037
3038     case ARRAY_REF:
3039       error ("%s for %<operator[]%> in %<%E[%E]%>", problem, arg1, arg2);
3040       break;
3041
3042     case REALPART_EXPR:
3043     case IMAGPART_EXPR:
3044       error ("%s for %qs in %<%s %E%>", problem, opname, opname, arg1);
3045       break;
3046
3047     default:
3048       if (arg2)
3049         error ("%s for %<operator%s%> in %<%E %s %E%>",
3050                problem, opname, arg1, opname, arg2);
3051       else
3052         error ("%s for %<operator%s%> in %<%s%E%>",
3053                problem, opname, opname, arg1);
3054       break;
3055     }
3056 }
3057
3058 /* Return the implicit conversion sequence that could be used to
3059    convert E1 to E2 in [expr.cond].  */
3060
3061 static conversion *
3062 conditional_conversion (tree e1, tree e2)
3063 {
3064   tree t1 = non_reference (TREE_TYPE (e1));
3065   tree t2 = non_reference (TREE_TYPE (e2));
3066   conversion *conv;
3067   bool good_base;
3068
3069   /* [expr.cond]
3070
3071      If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3072      implicitly converted (clause _conv_) to the type "reference to
3073      T2", subject to the constraint that in the conversion the
3074      reference must bind directly (_dcl.init.ref_) to E1.  */
3075   if (real_lvalue_p (e2))
3076     {
3077       conv = implicit_conversion (build_reference_type (t2),
3078                                   t1,
3079                                   e1,
3080                                   /*c_cast_p=*/false,
3081                                   LOOKUP_NO_TEMP_BIND);
3082       if (conv)
3083         return conv;
3084     }
3085
3086   /* [expr.cond]
3087
3088      If E1 and E2 have class type, and the underlying class types are
3089      the same or one is a base class of the other: E1 can be converted
3090      to match E2 if the class of T2 is the same type as, or a base
3091      class of, the class of T1, and the cv-qualification of T2 is the
3092      same cv-qualification as, or a greater cv-qualification than, the
3093      cv-qualification of T1.  If the conversion is applied, E1 is
3094      changed to an rvalue of type T2 that still refers to the original
3095      source class object (or the appropriate subobject thereof).  */
3096   if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3097       && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3098     {
3099       if (good_base && at_least_as_qualified_p (t2, t1))
3100         {
3101           conv = build_identity_conv (t1, e1);
3102           if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3103                             TYPE_MAIN_VARIANT (t2)))
3104             conv = build_conv (ck_base, t2, conv);
3105           else
3106             conv = build_conv (ck_rvalue, t2, conv);
3107           return conv;
3108         }
3109       else
3110         return NULL;
3111     }
3112   else
3113     /* [expr.cond]
3114
3115        Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3116        converted to the type that expression E2 would have if E2 were
3117        converted to an rvalue (or the type it has, if E2 is an rvalue).  */
3118     return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3119                                 LOOKUP_NORMAL);
3120 }
3121
3122 /* Implement [expr.cond].  ARG1, ARG2, and ARG3 are the three
3123    arguments to the conditional expression.  */
3124
3125 tree
3126 build_conditional_expr (tree arg1, tree arg2, tree arg3)
3127 {
3128   tree arg2_type;
3129   tree arg3_type;
3130   tree result = NULL_TREE;
3131   tree result_type = NULL_TREE;
3132   bool lvalue_p = true;
3133   struct z_candidate *candidates = 0;
3134   struct z_candidate *cand;
3135   void *p;
3136
3137   /* As a G++ extension, the second argument to the conditional can be
3138      omitted.  (So that `a ? : c' is roughly equivalent to `a ? a :
3139      c'.)  If the second operand is omitted, make sure it is
3140      calculated only once.  */
3141   if (!arg2)
3142     {
3143       if (pedantic)
3144         pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3145
3146       /* Make sure that lvalues remain lvalues.  See g++.oliva/ext1.C.  */
3147       if (real_lvalue_p (arg1))
3148         arg2 = arg1 = stabilize_reference (arg1);
3149       else
3150         arg2 = arg1 = save_expr (arg1);
3151     }
3152
3153   /* [expr.cond]
3154
3155      The first expr ession is implicitly converted to bool (clause
3156      _conv_).  */
3157   arg1 = perform_implicit_conversion (boolean_type_node, arg1);
3158
3159   /* If something has already gone wrong, just pass that fact up the
3160      tree.  */
3161   if (error_operand_p (arg1)
3162       || error_operand_p (arg2)
3163       || error_operand_p (arg3))
3164     return error_mark_node;
3165
3166   /* [expr.cond]
3167
3168      If either the second or the third operand has type (possibly
3169      cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3170      array-to-pointer (_conv.array_), and function-to-pointer
3171      (_conv.func_) standard conversions are performed on the second
3172      and third operands.  */
3173   arg2_type = TREE_TYPE (arg2);
3174   arg3_type = TREE_TYPE (arg3);
3175   if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3176     {
3177       /* Do the conversions.  We don't these for `void' type arguments
3178          since it can't have any effect and since decay_conversion
3179          does not handle that case gracefully.  */
3180       if (!VOID_TYPE_P (arg2_type))
3181         arg2 = decay_conversion (arg2);
3182       if (!VOID_TYPE_P (arg3_type))
3183         arg3 = decay_conversion (arg3);
3184       arg2_type = TREE_TYPE (arg2);
3185       arg3_type = TREE_TYPE (arg3);
3186
3187       /* [expr.cond]
3188
3189          One of the following shall hold:
3190
3191          --The second or the third operand (but not both) is a
3192            throw-expression (_except.throw_); the result is of the
3193            type of the other and is an rvalue.
3194
3195          --Both the second and the third operands have type void; the
3196            result is of type void and is an rvalue.
3197
3198          We must avoid calling force_rvalue for expressions of type
3199          "void" because it will complain that their value is being
3200          used.  */
3201       if (TREE_CODE (arg2) == THROW_EXPR
3202           && TREE_CODE (arg3) != THROW_EXPR)
3203         {
3204           if (!VOID_TYPE_P (arg3_type))
3205             arg3 = force_rvalue (arg3);
3206           arg3_type = TREE_TYPE (arg3);
3207           result_type = arg3_type;
3208         }
3209       else if (TREE_CODE (arg2) != THROW_EXPR
3210                && TREE_CODE (arg3) == THROW_EXPR)
3211         {
3212           if (!VOID_TYPE_P (arg2_type))
3213             arg2 = force_rvalue (arg2);
3214           arg2_type = TREE_TYPE (arg2);
3215           result_type = arg2_type;
3216         }
3217       else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3218         result_type = void_type_node;
3219       else
3220         {
3221           error ("%qE has type %<void%> and is not a throw-expression",
3222                     VOID_TYPE_P (arg2_type) ? arg2 : arg3);
3223           return error_mark_node;
3224         }
3225
3226       lvalue_p = false;
3227       goto valid_operands;
3228     }
3229   /* [expr.cond]
3230
3231      Otherwise, if the second and third operand have different types,
3232      and either has (possibly cv-qualified) class type, an attempt is
3233      made to convert each of those operands to the type of the other.  */
3234   else if (!same_type_p (arg2_type, arg3_type)
3235            && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3236     {
3237       conversion *conv2;
3238       conversion *conv3;
3239
3240       /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3241       p = conversion_obstack_alloc (0);
3242
3243       conv2 = conditional_conversion (arg2, arg3);
3244       conv3 = conditional_conversion (arg3, arg2);
3245
3246       /* [expr.cond]
3247
3248          If both can be converted, or one can be converted but the
3249          conversion is ambiguous, the program is ill-formed.  If
3250          neither can be converted, the operands are left unchanged and
3251          further checking is performed as described below.  If exactly
3252          one conversion is possible, that conversion is applied to the
3253          chosen operand and the converted operand is used in place of
3254          the original operand for the remainder of this section.  */
3255       if ((conv2 && !conv2->bad_p
3256            && conv3 && !conv3->bad_p)
3257           || (conv2 && conv2->kind == ck_ambig)
3258           || (conv3 && conv3->kind == ck_ambig))
3259         {
3260           error ("operands to ?: have different types");
3261           result = error_mark_node;
3262         }
3263       else if (conv2 && !conv2->bad_p)
3264         {
3265           arg2 = convert_like (conv2, arg2);
3266           arg2 = convert_from_reference (arg2);
3267           arg2_type = TREE_TYPE (arg2);
3268         }
3269       else if (conv3 && !conv3->bad_p)
3270         {
3271           arg3 = convert_like (conv3, arg3);
3272           arg3 = convert_from_reference (arg3);
3273           arg3_type = TREE_TYPE (arg3);
3274         }
3275
3276       /* Free all the conversions we allocated.  */
3277       obstack_free (&conversion_obstack, p);
3278
3279       if (result)
3280         return result;
3281
3282       /* If, after the conversion, both operands have class type,
3283          treat the cv-qualification of both operands as if it were the
3284          union of the cv-qualification of the operands.
3285
3286          The standard is not clear about what to do in this
3287          circumstance.  For example, if the first operand has type
3288          "const X" and the second operand has a user-defined
3289          conversion to "volatile X", what is the type of the second
3290          operand after this step?  Making it be "const X" (matching
3291          the first operand) seems wrong, as that discards the
3292          qualification without actually performing a copy.  Leaving it
3293          as "volatile X" seems wrong as that will result in the
3294          conditional expression failing altogether, even though,
3295          according to this step, the one operand could be converted to
3296          the type of the other.  */
3297       if ((conv2 || conv3)
3298           && CLASS_TYPE_P (arg2_type)
3299           && TYPE_QUALS (arg2_type) != TYPE_QUALS (arg3_type))
3300         arg2_type = arg3_type =
3301           cp_build_qualified_type (arg2_type,
3302                                    TYPE_QUALS (arg2_type)
3303                                    | TYPE_QUALS (arg3_type));
3304     }
3305
3306   /* [expr.cond]
3307
3308      If the second and third operands are lvalues and have the same
3309      type, the result is of that type and is an lvalue.  */
3310   if (real_lvalue_p (arg2)
3311       && real_lvalue_p (arg3)
3312       && same_type_p (arg2_type, arg3_type))
3313     {
3314       result_type = arg2_type;
3315       goto valid_operands;
3316     }
3317
3318   /* [expr.cond]
3319
3320      Otherwise, the result is an rvalue.  If the second and third
3321      operand do not have the same type, and either has (possibly
3322      cv-qualified) class type, overload resolution is used to
3323      determine the conversions (if any) to be applied to the operands
3324      (_over.match.oper_, _over.built_).  */
3325   lvalue_p = false;
3326   if (!same_type_p (arg2_type, arg3_type)
3327       && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3328     {
3329       tree args[3];
3330       conversion *conv;
3331       bool any_viable_p;
3332
3333       /* Rearrange the arguments so that add_builtin_candidate only has
3334          to know about two args.  In build_builtin_candidates, the
3335          arguments are unscrambled.  */
3336       args[0] = arg2;
3337       args[1] = arg3;
3338       args[2] = arg1;
3339       add_builtin_candidates (&candidates,
3340                               COND_EXPR,
3341                               NOP_EXPR,
3342                               ansi_opname (COND_EXPR),
3343                               args,
3344                               LOOKUP_NORMAL);
3345
3346       /* [expr.cond]
3347
3348          If the overload resolution fails, the program is
3349          ill-formed.  */
3350       candidates = splice_viable (candidates, pedantic, &any_viable_p);
3351       if (!any_viable_p)
3352         {
3353           op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3354           print_z_candidates (candidates);
3355           return error_mark_node;
3356         }
3357       cand = tourney (candidates);
3358       if (!cand)
3359         {
3360           op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3361           print_z_candidates (candidates);
3362           return error_mark_node;
3363         }
3364
3365       /* [expr.cond]
3366
3367          Otherwise, the conversions thus determined are applied, and
3368          the converted operands are used in place of the original
3369          operands for the remainder of this section.  */
3370       conv = cand->convs[0];
3371       arg1 = convert_like (conv, arg1);
3372       conv = cand->convs[1];
3373       arg2 = convert_like (conv, arg2);
3374       conv = cand->convs[2];
3375       arg3 = convert_like (conv, arg3);
3376     }
3377
3378   /* [expr.cond]
3379
3380      Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3381      and function-to-pointer (_conv.func_) standard conversions are
3382      performed on the second and third operands.
3383
3384      We need to force the lvalue-to-rvalue conversion here for class types,
3385      so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3386      that isn't wrapped with a TARGET_EXPR plays havoc with exception
3387      regions.  */
3388
3389   arg2 = force_rvalue (arg2);
3390   if (!CLASS_TYPE_P (arg2_type))
3391     arg2_type = TREE_TYPE (arg2);
3392
3393   arg3 = force_rvalue (arg3);
3394   if (!CLASS_TYPE_P (arg2_type))
3395     arg3_type = TREE_TYPE (arg3);
3396
3397   if (arg2 == error_mark_node || arg3 == error_mark_node)
3398     return error_mark_node;
3399
3400   /* [expr.cond]
3401
3402      After those conversions, one of the following shall hold:
3403
3404      --The second and third operands have the same type; the result  is  of
3405        that type.  */
3406   if (same_type_p (arg2_type, arg3_type))
3407     result_type = arg2_type;
3408   /* [expr.cond]
3409
3410      --The second and third operands have arithmetic or enumeration
3411        type; the usual arithmetic conversions are performed to bring
3412        them to a common type, and the result is of that type.  */
3413   else if ((ARITHMETIC_TYPE_P (arg2_type)
3414             || TREE_CODE (arg2_type) == ENUMERAL_TYPE)
3415            && (ARITHMETIC_TYPE_P (arg3_type)
3416                || TREE_CODE (arg3_type) == ENUMERAL_TYPE))
3417     {
3418       /* In this case, there is always a common type.  */
3419       result_type = type_after_usual_arithmetic_conversions (arg2_type,
3420                                                              arg3_type);
3421
3422       if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3423           && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3424          warning (0, "enumeral mismatch in conditional expression: %qT vs %qT",
3425                    arg2_type, arg3_type);
3426       else if (extra_warnings
3427                && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3428                     && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3429                    || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3430                        && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3431         warning (0, "enumeral and non-enumeral type in conditional expression");
3432
3433       arg2 = perform_implicit_conversion (result_type, arg2);
3434       arg3 = perform_implicit_conversion (result_type, arg3);
3435     }
3436   /* [expr.cond]
3437
3438      --The second and third operands have pointer type, or one has
3439        pointer type and the other is a null pointer constant; pointer
3440        conversions (_conv.ptr_) and qualification conversions
3441        (_conv.qual_) are performed to bring them to their composite
3442        pointer type (_expr.rel_).  The result is of the composite
3443        pointer type.
3444
3445      --The second and third operands have pointer to member type, or
3446        one has pointer to member type and the other is a null pointer
3447        constant; pointer to member conversions (_conv.mem_) and
3448        qualification conversions (_conv.qual_) are performed to bring
3449        them to a common type, whose cv-qualification shall match the
3450        cv-qualification of either the second or the third operand.
3451        The result is of the common type.  */
3452   else if ((null_ptr_cst_p (arg2)
3453             && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
3454            || (null_ptr_cst_p (arg3)
3455                && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
3456            || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3457            || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3458            || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
3459     {
3460       result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3461                                             arg3, "conditional expression");
3462       if (result_type == error_mark_node)
3463         return error_mark_node;
3464       arg2 = perform_implicit_conversion (result_type, arg2);
3465       arg3 = perform_implicit_conversion (result_type, arg3);
3466     }
3467
3468   if (!result_type)
3469     {
3470       error ("operands to ?: have different types");
3471       return error_mark_node;
3472     }
3473
3474  valid_operands:
3475   result = fold_if_not_in_template (build3 (COND_EXPR, result_type, arg1,
3476                                             arg2, arg3));
3477   /* We can't use result_type below, as fold might have returned a
3478      throw_expr.  */
3479
3480   /* Expand both sides into the same slot, hopefully the target of the
3481      ?: expression.  We used to check for TARGET_EXPRs here, but now we
3482      sometimes wrap them in NOP_EXPRs so the test would fail.  */
3483   if (!lvalue_p && CLASS_TYPE_P (TREE_TYPE (result)))
3484     result = get_target_expr (result);
3485
3486   /* If this expression is an rvalue, but might be mistaken for an
3487      lvalue, we must add a NON_LVALUE_EXPR.  */
3488   if (!lvalue_p && real_lvalue_p (result))
3489     result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
3490
3491   return result;
3492 }
3493
3494 /* OPERAND is an operand to an expression.  Perform necessary steps
3495    required before using it.  If OPERAND is NULL_TREE, NULL_TREE is
3496    returned.  */
3497
3498 static tree
3499 prep_operand (tree operand)
3500 {
3501   if (operand)
3502     {
3503       if (CLASS_TYPE_P (TREE_TYPE (operand))
3504           && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3505         /* Make sure the template type is instantiated now.  */
3506         instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3507     }
3508
3509   return operand;
3510 }
3511
3512 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3513    OVERLOAD) to the CANDIDATES, returning an updated list of
3514    CANDIDATES.  The ARGS are the arguments provided to the call,
3515    without any implicit object parameter.  The EXPLICIT_TARGS are
3516    explicit template arguments provided.  TEMPLATE_ONLY is true if
3517    only template functions should be considered.  CONVERSION_PATH,
3518    ACCESS_PATH, and FLAGS are as for add_function_candidate.  */
3519
3520 static void
3521 add_candidates (tree fns, tree args,
3522                 tree explicit_targs, bool template_only,
3523                 tree conversion_path, tree access_path,
3524                 int flags,
3525                 struct z_candidate **candidates)
3526 {
3527   tree ctype;
3528   tree non_static_args;
3529
3530   ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3531   /* Delay creating the implicit this parameter until it is needed.  */
3532   non_static_args = NULL_TREE;
3533
3534   while (fns)
3535     {
3536       tree fn;
3537       tree fn_args;
3538
3539       fn = OVL_CURRENT (fns);
3540       /* Figure out which set of arguments to use.  */
3541       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3542         {
3543           /* If this function is a non-static member, prepend the implicit
3544              object parameter.  */
3545           if (!non_static_args)
3546             non_static_args = tree_cons (NULL_TREE,
3547                                          build_this (TREE_VALUE (args)),
3548                                          TREE_CHAIN (args));
3549           fn_args = non_static_args;
3550         }
3551       else
3552         /* Otherwise, just use the list of arguments provided.  */
3553         fn_args = args;
3554
3555       if (TREE_CODE (fn) == TEMPLATE_DECL)
3556         add_template_candidate (candidates,
3557                                 fn,
3558                                 ctype,
3559                                 explicit_targs,
3560                                 fn_args,
3561                                 NULL_TREE,
3562                                 access_path,
3563                                 conversion_path,
3564                                 flags,
3565                                 DEDUCE_CALL);
3566       else if (!template_only)
3567         add_function_candidate (candidates,
3568                                 fn,
3569                                 ctype,
3570                                 fn_args,
3571                                 access_path,
3572                                 conversion_path,
3573                                 flags);
3574       fns = OVL_NEXT (fns);
3575     }
3576 }
3577
3578 tree
3579 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
3580               bool *overloaded_p)
3581 {
3582   struct z_candidate *candidates = 0, *cand;
3583   tree arglist, fnname;
3584   tree args[3];
3585   tree result = NULL_TREE;
3586   bool result_valid_p = false;
3587   enum tree_code code2 = NOP_EXPR;
3588   conversion *conv;
3589   void *p;
3590   bool strict_p;
3591   bool any_viable_p;
3592
3593   if (error_operand_p (arg1)
3594       || error_operand_p (arg2)
3595       || error_operand_p (arg3))
3596     return error_mark_node;
3597
3598   if (code == MODIFY_EXPR)
3599     {
3600       code2 = TREE_CODE (arg3);
3601       arg3 = NULL_TREE;
3602       fnname = ansi_assopname (code2);
3603     }
3604   else
3605     fnname = ansi_opname (code);
3606
3607   arg1 = prep_operand (arg1);
3608
3609   switch (code)
3610     {
3611     case NEW_EXPR:
3612     case VEC_NEW_EXPR:
3613     case VEC_DELETE_EXPR:
3614     case DELETE_EXPR:
3615       /* Use build_op_new_call and build_op_delete_call instead.  */
3616       gcc_unreachable ();
3617
3618     case CALL_EXPR:
3619       return build_object_call (arg1, arg2);
3620
3621     default:
3622       break;
3623     }
3624
3625   arg2 = prep_operand (arg2);
3626   arg3 = prep_operand (arg3);
3627
3628   if (code == COND_EXPR)
3629     {
3630       if (arg2 == NULL_TREE
3631           || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3632           || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3633           || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3634               && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3635         goto builtin;
3636     }
3637   else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3638            && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3639     goto builtin;
3640
3641   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3642     arg2 = integer_zero_node;
3643
3644   arglist = NULL_TREE;
3645   if (arg3)
3646     arglist = tree_cons (NULL_TREE, arg3, arglist);
3647   if (arg2)
3648     arglist = tree_cons (NULL_TREE, arg2, arglist);
3649   arglist = tree_cons (NULL_TREE, arg1, arglist);
3650
3651   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3652   p = conversion_obstack_alloc (0);
3653
3654   /* Add namespace-scope operators to the list of functions to
3655      consider.  */
3656   add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
3657                   arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
3658                   flags, &candidates);
3659   /* Add class-member operators to the candidate set.  */
3660   if (CLASS_TYPE_P (TREE_TYPE (arg1)))
3661     {
3662       tree fns;
3663
3664       fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
3665       if (fns == error_mark_node)
3666         {
3667           result = error_mark_node;
3668           goto user_defined_result_ready;
3669         }
3670       if (fns)
3671         add_candidates (BASELINK_FUNCTIONS (fns), arglist,
3672                         NULL_TREE, false,
3673                         BASELINK_BINFO (fns),
3674                         TYPE_BINFO (TREE_TYPE (arg1)),
3675                         flags, &candidates);
3676     }
3677
3678   /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3679      to know about two args; a builtin candidate will always have a first
3680      parameter of type bool.  We'll handle that in
3681      build_builtin_candidate.  */
3682   if (code == COND_EXPR)
3683     {
3684       args[0] = arg2;
3685       args[1] = arg3;
3686       args[2] = arg1;
3687     }
3688   else
3689     {
3690       args[0] = arg1;
3691       args[1] = arg2;
3692       args[2] = NULL_TREE;
3693     }
3694
3695   add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
3696
3697   switch (code)
3698     {
3699     case COMPOUND_EXPR:
3700     case ADDR_EXPR:
3701       /* For these, the built-in candidates set is empty
3702          [over.match.oper]/3.  We don't want non-strict matches
3703          because exact matches are always possible with built-in
3704          operators.  The built-in candidate set for COMPONENT_REF
3705          would be empty too, but since there are no such built-in
3706          operators, we accept non-strict matches for them.  */
3707       strict_p = true;
3708       break;
3709
3710     default:
3711       strict_p = pedantic;
3712       break;
3713     }
3714
3715   candidates = splice_viable (candidates, strict_p, &any_viable_p);
3716   if (!any_viable_p)
3717     {
3718       switch (code)
3719         {
3720         case POSTINCREMENT_EXPR:
3721         case POSTDECREMENT_EXPR:
3722           /* Look for an `operator++ (int)'.  If they didn't have
3723              one, then we fall back to the old way of doing things.  */
3724           if (flags & LOOKUP_COMPLAIN)
3725             pedwarn ("no %<%D(int)%> declared for postfix %qs, "
3726                      "trying prefix operator instead",
3727                      fnname,
3728                      operator_name_info[code].name);
3729           if (code == POSTINCREMENT_EXPR)
3730             code = PREINCREMENT_EXPR;
3731           else
3732             code = PREDECREMENT_EXPR;
3733           result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
3734                                  overloaded_p);
3735           break;
3736
3737           /* The caller will deal with these.  */
3738         case ADDR_EXPR:
3739         case COMPOUND_EXPR:
3740         case COMPONENT_REF:
3741           result = NULL_TREE;
3742           result_valid_p = true;
3743           break;
3744
3745         default:
3746           if (flags & LOOKUP_COMPLAIN)
3747             {
3748               op_error (code, code2, arg1, arg2, arg3, "no match");
3749               print_z_candidates (candidates);
3750             }
3751           result = error_mark_node;
3752           break;
3753         }
3754     }
3755   else
3756     {
3757       cand = tourney (candidates);
3758       if (cand == 0)
3759         {
3760           if (flags & LOOKUP_COMPLAIN)
3761             {
3762               op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
3763               print_z_candidates (candidates);
3764             }
3765           result = error_mark_node;
3766         }
3767       else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
3768         {
3769           if (overloaded_p)
3770             *overloaded_p = true;
3771
3772           result = build_over_call (cand, LOOKUP_NORMAL);
3773         }
3774       else
3775         {
3776           /* Give any warnings we noticed during overload resolution.  */
3777           if (cand->warnings)
3778             {
3779               struct candidate_warning *w;
3780               for (w = cand->warnings; w; w = w->next)
3781                 joust (cand, w->loser, 1);
3782             }
3783
3784           /* Check for comparison of different enum types.  */
3785           switch (code)
3786             {
3787             case GT_EXPR:
3788             case LT_EXPR:
3789             case GE_EXPR:
3790             case LE_EXPR:
3791             case EQ_EXPR:
3792             case NE_EXPR:
3793               if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
3794                   && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
3795                   && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
3796                       != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
3797                 {
3798                   warning (0, "comparison between %q#T and %q#T",
3799                            TREE_TYPE (arg1), TREE_TYPE (arg2));
3800                 }
3801               break;
3802             default:
3803               break;
3804             }
3805
3806           /* We need to strip any leading REF_BIND so that bitfields
3807              don't cause errors.  This should not remove any important
3808              conversions, because builtins don't apply to class
3809              objects directly.  */
3810           conv = cand->convs[0];
3811           if (conv->kind == ck_ref_bind)
3812             conv = conv->u.next;
3813           arg1 = convert_like (conv, arg1);
3814           if (arg2)
3815             {
3816               conv = cand->convs[1];
3817               if (conv->kind == ck_ref_bind)
3818                 conv = conv->u.next;
3819               arg2 = convert_like (conv, arg2);
3820             }
3821           if (arg3)
3822             {
3823               conv = cand->convs[2];
3824               if (conv->kind == ck_ref_bind)
3825                 conv = conv->u.next;
3826               arg3 = convert_like (conv, arg3);
3827             }
3828         }
3829     }
3830
3831  user_defined_result_ready:
3832
3833   /* Free all the conversions we allocated.  */
3834   obstack_free (&conversion_obstack, p);
3835
3836   if (result || result_valid_p)
3837     return result;
3838
3839  builtin:
3840   switch (code)
3841     {
3842     case MODIFY_EXPR:
3843       return build_modify_expr (arg1, code2, arg2);
3844
3845     case INDIRECT_REF:
3846       return build_indirect_ref (arg1, "unary *");
3847
3848     case PLUS_EXPR:
3849     case MINUS_EXPR:
3850     case MULT_EXPR:
3851     case TRUNC_DIV_EXPR:
3852     case GT_EXPR:
3853     case LT_EXPR:
3854     case GE_EXPR:
3855     case LE_EXPR:
3856     case EQ_EXPR:
3857     case NE_EXPR:
3858     case MAX_EXPR:
3859     case MIN_EXPR:
3860     case LSHIFT_EXPR:
3861     case RSHIFT_EXPR:
3862     case TRUNC_MOD_EXPR:
3863     case BIT_AND_EXPR:
3864     case BIT_IOR_EXPR:
3865     case BIT_XOR_EXPR:
3866     case TRUTH_ANDIF_EXPR:
3867     case TRUTH_ORIF_EXPR:
3868       return cp_build_binary_op (code, arg1, arg2);
3869
3870     case UNARY_PLUS_EXPR:
3871     case NEGATE_EXPR:
3872     case BIT_NOT_EXPR:
3873     case TRUTH_NOT_EXPR:
3874     case PREINCREMENT_EXPR:
3875     case POSTINCREMENT_EXPR:
3876     case PREDECREMENT_EXPR:
3877     case POSTDECREMENT_EXPR:
3878     case REALPART_EXPR:
3879     case IMAGPART_EXPR:
3880       return build_unary_op (code, arg1, candidates != 0);
3881
3882     case ARRAY_REF:
3883       return build_array_ref (arg1, arg2);
3884
3885     case COND_EXPR:
3886       return build_conditional_expr (arg1, arg2, arg3);
3887
3888     case MEMBER_REF:
3889       return build_m_component_ref (build_indirect_ref (arg1, NULL), arg2);
3890
3891       /* The caller will deal with these.  */
3892     case ADDR_EXPR:
3893     case COMPONENT_REF:
3894     case COMPOUND_EXPR:
3895       return NULL_TREE;
3896
3897     default:
3898       gcc_unreachable ();
3899     }
3900   return NULL_TREE;
3901 }
3902
3903 /* Build a call to operator delete.  This has to be handled very specially,
3904    because the restrictions on what signatures match are different from all
3905    other call instances.  For a normal delete, only a delete taking (void *)
3906    or (void *, size_t) is accepted.  For a placement delete, only an exact
3907    match with the placement new is accepted.
3908
3909    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3910    ADDR is the pointer to be deleted.
3911    SIZE is the size of the memory block to be deleted.
3912    GLOBAL_P is true if the delete-expression should not consider
3913    class-specific delete operators.
3914    PLACEMENT is the corresponding placement new call, or NULL_TREE.  */
3915
3916 tree
3917 build_op_delete_call (enum tree_code code, tree addr, tree size,
3918                       bool global_p, tree placement)
3919 {
3920   tree fn = NULL_TREE;
3921   tree fns, fnname, argtypes, args, type;
3922   int pass;
3923
3924   if (addr == error_mark_node)
3925     return error_mark_node;
3926
3927   type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
3928
3929   fnname = ansi_opname (code);
3930
3931   if (CLASS_TYPE_P (type)
3932       && COMPLETE_TYPE_P (complete_type (type))
3933       && !global_p)
3934     /* In [class.free]
3935
3936        If the result of the lookup is ambiguous or inaccessible, or if
3937        the lookup selects a placement deallocation function, the
3938        program is ill-formed.
3939
3940        Therefore, we ask lookup_fnfields to complain about ambiguity.  */
3941     {
3942       fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
3943       if (fns == error_mark_node)
3944         return error_mark_node;
3945     }
3946   else
3947     fns = NULL_TREE;
3948
3949   if (fns == NULL_TREE)
3950     fns = lookup_name_nonclass (fnname);
3951
3952   if (placement)
3953     {
3954       tree alloc_fn;
3955       tree call_expr;
3956
3957       /* Find the allocation function that is being called.  */
3958       call_expr = placement;
3959       /* Extract the function.  */
3960       alloc_fn = get_callee_fndecl (call_expr);
3961       gcc_assert (alloc_fn != NULL_TREE);
3962       /* Then the second parm type.  */
3963       argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
3964       /* Also the second argument.  */
3965       args = TREE_CHAIN (TREE_OPERAND (call_expr, 1));
3966     }
3967   else
3968     {
3969       /* First try it without the size argument.  */
3970       argtypes = void_list_node;
3971       args = NULL_TREE;
3972     }
3973
3974   /* Strip const and volatile from addr.  */
3975   addr = cp_convert (ptr_type_node, addr);
3976
3977   /* We make two tries at finding a matching `operator delete'.  On
3978      the first pass, we look for a one-operator (or placement)
3979      operator delete.  If we're not doing placement delete, then on
3980      the second pass we look for a two-argument delete.  */
3981   for (pass = 0; pass < (placement ? 1 : 2); ++pass)
3982     {
3983       /* Go through the `operator delete' functions looking for one
3984          with a matching type.  */
3985       for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
3986            fn;
3987            fn = OVL_NEXT (fn))
3988         {
3989           tree t;
3990
3991           /* The first argument must be "void *".  */
3992           t = TYPE_ARG_TYPES (TREE_TYPE (OVL_CURRENT (fn)));
3993           if (!same_type_p (TREE_VALUE (t), ptr_type_node))
3994             continue;
3995           t = TREE_CHAIN (t);
3996           /* On the first pass, check the rest of the arguments.  */
3997           if (pass == 0)
3998             {
3999               tree a = argtypes;
4000               while (a && t)
4001                 {
4002                   if (!same_type_p (TREE_VALUE (a), TREE_VALUE (t)))
4003                     break;
4004                   a = TREE_CHAIN (a);
4005                   t = TREE_CHAIN (t);
4006                 }
4007               if (!a && !t)
4008                 break;
4009             }
4010           /* On the second pass, the second argument must be
4011              "size_t".  */
4012           else if (pass == 1
4013                    && same_type_p (TREE_VALUE (t), sizetype)
4014                    && TREE_CHAIN (t) == void_list_node)
4015             break;
4016         }
4017
4018       /* If we found a match, we're done.  */
4019       if (fn)
4020         break;
4021     }
4022
4023   /* If we have a matching function, call it.  */
4024   if (fn)
4025     {
4026       /* Make sure we have the actual function, and not an
4027          OVERLOAD.  */
4028       fn = OVL_CURRENT (fn);
4029
4030       /* If the FN is a member function, make sure that it is
4031          accessible.  */
4032       if (DECL_CLASS_SCOPE_P (fn))
4033         perform_or_defer_access_check (TYPE_BINFO (type), fn);
4034
4035       if (pass == 0)
4036         args = tree_cons (NULL_TREE, addr, args);
4037       else
4038         args = tree_cons (NULL_TREE, addr,
4039                           build_tree_list (NULL_TREE, size));
4040
4041       if (placement)
4042         {
4043           /* The placement args might not be suitable for overload
4044              resolution at this point, so build the call directly.  */
4045           mark_used (fn);
4046           return build_cxx_call (fn, args);
4047         }
4048       else
4049         return build_function_call (fn, args);
4050     }
4051
4052   /* If we are doing placement delete we do nothing if we don't find a
4053      matching op delete.  */
4054   if (placement)
4055     return NULL_TREE;
4056
4057   error ("no suitable %<operator %s%> for %qT",
4058          operator_name_info[(int)code].name, type);
4059   return error_mark_node;
4060 }
4061
4062 /* If the current scope isn't allowed to access DECL along
4063    BASETYPE_PATH, give an error.  The most derived class in
4064    BASETYPE_PATH is the one used to qualify DECL.  */
4065
4066 bool
4067 enforce_access (tree basetype_path, tree decl)
4068 {
4069   gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4070
4071   if (!accessible_p (basetype_path, decl, true))
4072     {
4073       if (TREE_PRIVATE (decl))
4074         error ("%q+#D is private", decl);
4075       else if (TREE_PROTECTED (decl))
4076         error ("%q+#D is protected", decl);
4077       else
4078         error ("%q+#D is inaccessible", decl);
4079       error ("within this context");
4080       return false;
4081     }
4082
4083   return true;
4084 }
4085
4086 /* Check that a callable constructor to initialize a temporary of
4087    TYPE from an EXPR exists.  */
4088
4089 static void
4090 check_constructor_callable (tree type, tree expr)
4091 {
4092   build_special_member_call (NULL_TREE,
4093                              complete_ctor_identifier,
4094                              build_tree_list (NULL_TREE, expr),
4095                              type,
4096                              LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING
4097                              | LOOKUP_NO_CONVERSION
4098                              | LOOKUP_CONSTRUCTOR_CALLABLE);
4099 }
4100
4101 /* Initialize a temporary of type TYPE with EXPR.  The FLAGS are a
4102    bitwise or of LOOKUP_* values.  If any errors are warnings are
4103    generated, set *DIAGNOSTIC_FN to "error" or "warning",
4104    respectively.  If no diagnostics are generated, set *DIAGNOSTIC_FN
4105    to NULL.  */
4106
4107 static tree
4108 build_temp (tree expr, tree type, int flags,
4109             diagnostic_fn_t *diagnostic_fn)
4110 {
4111   int savew, savee;
4112
4113   savew = warningcount, savee = errorcount;
4114   expr = build_special_member_call (NULL_TREE,
4115                                     complete_ctor_identifier,
4116                                     build_tree_list (NULL_TREE, expr),
4117                                     type, flags);
4118   if (warningcount > savew)
4119     *diagnostic_fn = warning0;
4120   else if (errorcount > savee)
4121     *diagnostic_fn = error;
4122   else
4123     *diagnostic_fn = NULL;
4124   return expr;
4125 }
4126
4127
4128 /* Perform the conversions in CONVS on the expression EXPR.  FN and
4129    ARGNUM are used for diagnostics.  ARGNUM is zero based, -1
4130    indicates the `this' argument of a method.  INNER is nonzero when
4131    being called to continue a conversion chain. It is negative when a
4132    reference binding will be applied, positive otherwise.  If
4133    ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4134    conversions will be emitted if appropriate.  If C_CAST_P is true,
4135    this conversion is coming from a C-style cast; in that case,
4136    conversions to inaccessible bases are permitted.  */
4137
4138 static tree
4139 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4140                    int inner, bool issue_conversion_warnings,
4141                    bool c_cast_p)
4142 {
4143   tree totype = convs->type;
4144   diagnostic_fn_t diagnostic_fn;
4145
4146   if (convs->bad_p
4147       && convs->kind != ck_user
4148       && convs->kind != ck_ambig
4149       && convs->kind != ck_ref_bind)
4150     {
4151       conversion *t = convs;
4152       for (; t; t = convs->u.next)
4153         {
4154           if (t->kind == ck_user || !t->bad_p)
4155             {
4156               expr = convert_like_real (t, expr, fn, argnum, 1,
4157                                         /*issue_conversion_warnings=*/false,
4158                                         /*c_cast_p=*/false);
4159               break;
4160             }
4161           else if (t->kind == ck_ambig)
4162             return convert_like_real (t, expr, fn, argnum, 1,
4163                                       /*issue_conversion_warnings=*/false,
4164                                       /*c_cast_p=*/false);
4165           else if (t->kind == ck_identity)
4166             break;
4167         }
4168       pedwarn ("invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4169       if (fn)
4170         pedwarn ("  initializing argument %P of %qD", argnum, fn);
4171       return cp_convert (totype, expr);
4172     }
4173
4174   if (issue_conversion_warnings)
4175     {
4176       tree t = non_reference (totype);
4177
4178       /* Issue warnings about peculiar, but valid, uses of NULL.  */
4179       if (ARITHMETIC_TYPE_P (t) && expr == null_node)
4180         {
4181           if (fn)
4182             warning (0, "passing NULL to non-pointer argument %P of %qD",
4183                      argnum, fn);
4184           else
4185             warning (0, "converting to non-pointer type %qT from NULL", t);
4186         }
4187
4188       /* Warn about assigning a floating-point type to an integer type.  */
4189       if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
4190           && TREE_CODE (t) == INTEGER_TYPE)
4191         {
4192           if (fn)
4193             warning (0, "passing %qT for argument %P to %qD",
4194                      TREE_TYPE (expr), argnum, fn);
4195           else
4196             warning (0, "converting to %qT from %qT", t, TREE_TYPE (expr));
4197         }
4198       /* And warn about assigning a negative value to an unsigned
4199          variable.  */
4200       else if (TYPE_UNSIGNED (t) && TREE_CODE (t) != BOOLEAN_TYPE)
4201         {
4202           if (TREE_CODE (expr) == INTEGER_CST && TREE_NEGATED_INT (expr))
4203             {
4204               if (fn)
4205                 warning (0, "passing negative value %qE for argument %P to %qD",
4206                          expr, argnum, fn);
4207               else
4208                 warning (0, "converting negative value %qE to %qT", expr, t);
4209             }
4210
4211           overflow_warning (expr);
4212         }
4213     }
4214
4215   switch (convs->kind)
4216     {
4217     case ck_user:
4218       {
4219         struct z_candidate *cand = convs->cand;
4220         tree convfn = cand->fn;
4221         tree args;
4222
4223         if (DECL_CONSTRUCTOR_P (convfn))
4224           {
4225             tree t = build_int_cst (build_pointer_type (DECL_CONTEXT (convfn)),
4226                                     0);
4227
4228             args = build_tree_list (NULL_TREE, expr);
4229             /* We should never try to call the abstract or base constructor
4230                from here.  */
4231             gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (convfn)
4232                         && !DECL_HAS_VTT_PARM_P (convfn));
4233             args = tree_cons (NULL_TREE, t, args);
4234           }
4235         else
4236           args = build_this (expr);
4237         expr = build_over_call (cand, LOOKUP_NORMAL);
4238
4239         /* If this is a constructor or a function returning an aggr type,
4240            we need to build up a TARGET_EXPR.  */
4241         if (DECL_CONSTRUCTOR_P (convfn))
4242           expr = build_cplus_new (totype, expr);
4243
4244         /* The result of the call is then used to direct-initialize the object
4245            that is the destination of the copy-initialization.  [dcl.init]
4246
4247            Note that this step is not reflected in the conversion sequence;
4248            it affects the semantics when we actually perform the
4249            conversion, but is not considered during overload resolution.
4250
4251            If the target is a class, that means call a ctor.  */
4252         if (IS_AGGR_TYPE (totype)
4253             && (inner >= 0 || !lvalue_p (expr)))
4254           {
4255             expr = (build_temp
4256                     (expr, totype,
4257                      /* Core issue 84, now a DR, says that we don't
4258                         allow UDCs for these args (which deliberately
4259                         breaks copy-init of an auto_ptr<Base> from an
4260                         auto_ptr<Derived>).  */
4261                      LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION,
4262                      &diagnostic_fn));
4263
4264             if (diagnostic_fn)
4265               {
4266                 if (fn)
4267                   diagnostic_fn
4268                     ("  initializing argument %P of %qD from result of %qD",
4269                      argnum, fn, convfn);
4270                 else
4271                  diagnostic_fn
4272                    ("  initializing temporary from result of %qD",  convfn);
4273               }
4274             expr = build_cplus_new (totype, expr);
4275           }
4276         return expr;
4277       }
4278     case ck_identity:
4279       if (type_unknown_p (expr))
4280         expr = instantiate_type (totype, expr, tf_error | tf_warning);
4281       /* Convert a constant to its underlying value, unless we are
4282          about to bind it to a reference, in which case we need to
4283          leave it as an lvalue.  */
4284       if (inner >= 0)
4285         expr = integral_constant_value (expr);
4286       if (convs->check_copy_constructor_p)
4287         check_constructor_callable (totype, expr);
4288       return expr;
4289     case ck_ambig:
4290       /* Call build_user_type_conversion again for the error.  */
4291       return build_user_type_conversion
4292         (totype, convs->u.expr, LOOKUP_NORMAL);
4293
4294     default:
4295       break;
4296     };
4297
4298   expr = convert_like_real (convs->u.next, expr, fn, argnum,
4299                             convs->kind == ck_ref_bind ? -1 : 1,
4300                             /*issue_conversion_warnings=*/false,
4301                             c_cast_p);
4302   if (expr == error_mark_node)
4303     return error_mark_node;
4304
4305   switch (convs->kind)
4306     {
4307     case ck_rvalue:
4308       if (! IS_AGGR_TYPE (totype))
4309         return expr;
4310       /* Else fall through.  */
4311     case ck_base:
4312       if (convs->kind == ck_base && !convs->need_temporary_p)
4313         {
4314           /* We are going to bind a reference directly to a base-class
4315              subobject of EXPR.  */
4316           if (convs->check_copy_constructor_p)
4317             check_constructor_callable (TREE_TYPE (expr), expr);
4318           /* Build an expression for `*((base*) &expr)'.  */
4319           expr = build_unary_op (ADDR_EXPR, expr, 0);
4320           expr = convert_to_base (expr, build_pointer_type (totype),
4321                                   !c_cast_p, /*nonnull=*/true);
4322           expr = build_indirect_ref (expr, "implicit conversion");
4323           return expr;
4324         }
4325
4326       /* Copy-initialization where the cv-unqualified version of the source
4327          type is the same class as, or a derived class of, the class of the
4328          destination [is treated as direct-initialization].  [dcl.init] */
4329       expr = build_temp (expr, totype, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
4330                          &diagnostic_fn);
4331       if (diagnostic_fn && fn)
4332         diagnostic_fn ("  initializing argument %P of %qD", argnum, fn);
4333       return build_cplus_new (totype, expr);
4334
4335     case ck_ref_bind:
4336       {
4337         tree ref_type = totype;
4338
4339         /* If necessary, create a temporary.  */
4340         if (convs->need_temporary_p || !lvalue_p (expr))
4341           {
4342             tree type = convs->u.next->type;
4343             cp_lvalue_kind lvalue = real_lvalue_p (expr);
4344
4345             if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
4346               {
4347                 /* If the reference is volatile or non-const, we
4348                    cannot create a temporary.  */
4349                 if (lvalue & clk_bitfield)
4350                   error ("cannot bind bitfield %qE to %qT",
4351                          expr, ref_type);
4352                 else if (lvalue & clk_packed)
4353                   error ("cannot bind packed field %qE to %qT",
4354                          expr, ref_type);
4355                 else
4356                   error ("cannot bind rvalue %qE to %qT", expr, ref_type);
4357                 return error_mark_node;
4358               }
4359             /* If the source is a packed field, and we must use a copy
4360                constructor, then building the target expr will require
4361                binding the field to the reference parameter to the
4362                copy constructor, and we'll end up with an infinite
4363                loop.  If we can use a bitwise copy, then we'll be
4364                OK.  */
4365             if ((lvalue & clk_packed)
4366                 && CLASS_TYPE_P (type)
4367                 && !TYPE_HAS_TRIVIAL_INIT_REF (type))
4368               {
4369                 error ("cannot bind packed field %qE to %qT",
4370                        expr, ref_type);
4371                 return error_mark_node;
4372               }
4373             expr = build_target_expr_with_type (expr, type);
4374           }
4375
4376         /* Take the address of the thing to which we will bind the
4377            reference.  */
4378         expr = build_unary_op (ADDR_EXPR, expr, 1);
4379         if (expr == error_mark_node)
4380           return error_mark_node;
4381
4382         /* Convert it to a pointer to the type referred to by the
4383            reference.  This will adjust the pointer if a derived to
4384            base conversion is being performed.  */
4385         expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
4386                            expr);
4387         /* Convert the pointer to the desired reference type.  */
4388         return build_nop (ref_type, expr);
4389       }
4390
4391     case ck_lvalue:
4392       return decay_conversion (expr);
4393
4394     case ck_qual:
4395       /* Warn about deprecated conversion if appropriate.  */
4396       string_conv_p (totype, expr, 1);
4397       break;
4398
4399     case ck_ptr:
4400       if (convs->base_p)
4401         expr = convert_to_base (expr, totype, !c_cast_p,
4402                                 /*nonnull=*/false);
4403       return build_nop (totype, expr);
4404
4405     case ck_pmem:
4406       return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
4407                              c_cast_p);
4408
4409     default:
4410       break;
4411     }
4412   return ocp_convert (totype, expr, CONV_IMPLICIT,
4413                       LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
4414 }
4415
4416 /* Build a call to __builtin_trap.  */
4417
4418 static tree
4419 call_builtin_trap (void)
4420 {
4421   tree fn = implicit_built_in_decls[BUILT_IN_TRAP];
4422
4423   gcc_assert (fn != NULL);
4424   fn = build_call (fn, NULL_TREE);
4425   return fn;
4426 }
4427
4428 /* ARG is being passed to a varargs function.  Perform any conversions
4429    required.  Return the converted value.  */
4430
4431 tree
4432 convert_arg_to_ellipsis (tree arg)
4433 {
4434   /* [expr.call]
4435
4436      The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
4437      standard conversions are performed.  */
4438   arg = decay_conversion (arg);
4439   /* [expr.call]
4440
4441      If the argument has integral or enumeration type that is subject
4442      to the integral promotions (_conv.prom_), or a floating point
4443      type that is subject to the floating point promotion
4444      (_conv.fpprom_), the value of the argument is converted to the
4445      promoted type before the call.  */
4446   if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4447       && (TYPE_PRECISION (TREE_TYPE (arg))
4448           < TYPE_PRECISION (double_type_node)))
4449     arg = convert_to_real (double_type_node, arg);
4450   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
4451     arg = perform_integral_promotions (arg);
4452
4453   arg = require_complete_type (arg);
4454
4455   if (arg != error_mark_node
4456       && !pod_type_p (TREE_TYPE (arg)))
4457     {
4458       /* Undefined behavior [expr.call] 5.2.2/7.  We used to just warn
4459          here and do a bitwise copy, but now cp_expr_size will abort if we
4460          try to do that.
4461          If the call appears in the context of a sizeof expression,
4462          there is no need to emit a warning, since the expression won't be
4463          evaluated. We keep the builtin_trap just as a safety check.  */
4464       if (!skip_evaluation)
4465         warning (0, "cannot pass objects of non-POD type %q#T through %<...%>; "
4466                  "call will abort at runtime", TREE_TYPE (arg));
4467       arg = call_builtin_trap ();
4468       arg = build2 (COMPOUND_EXPR, integer_type_node, arg,
4469                     integer_zero_node);
4470     }
4471
4472   return arg;
4473 }
4474
4475 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
4476
4477 tree
4478 build_x_va_arg (tree expr, tree type)
4479 {
4480   if (processing_template_decl)
4481     return build_min (VA_ARG_EXPR, type, expr);
4482
4483   type = complete_type_or_else (type, NULL_TREE);
4484
4485   if (expr == error_mark_node || !type)
4486     return error_mark_node;
4487
4488   if (! pod_type_p (type))
4489     {
4490       /* Undefined behavior [expr.call] 5.2.2/7.  */
4491       warning (0, "cannot receive objects of non-POD type %q#T through %<...%>; "
4492                "call will abort at runtime", type);
4493       expr = convert (build_pointer_type (type), null_node);
4494       expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr),
4495                      call_builtin_trap (), expr);
4496       expr = build_indirect_ref (expr, NULL);
4497       return expr;
4498     }
4499
4500   return build_va_arg (expr, type);
4501 }
4502
4503 /* TYPE has been given to va_arg.  Apply the default conversions which
4504    would have happened when passed via ellipsis.  Return the promoted
4505    type, or the passed type if there is no change.  */
4506
4507 tree
4508 cxx_type_promotes_to (tree type)
4509 {
4510   tree promote;
4511
4512   /* Perform the array-to-pointer and function-to-pointer
4513      conversions.  */
4514   type = type_decays_to (type);
4515
4516   promote = type_promotes_to (type);
4517   if (same_type_p (type, promote))
4518     promote = type;
4519
4520   return promote;
4521 }
4522
4523 /* ARG is a default argument expression being passed to a parameter of
4524    the indicated TYPE, which is a parameter to FN.  Do any required
4525    conversions.  Return the converted value.  */
4526
4527 tree
4528 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4529 {
4530   /* If the ARG is an unparsed default argument expression, the
4531      conversion cannot be performed.  */
4532   if (TREE_CODE (arg) == DEFAULT_ARG)
4533     {
4534       error ("the default argument for parameter %d of %qD has "
4535              "not yet been parsed",
4536              parmnum, fn);
4537       return error_mark_node;
4538     }
4539
4540   if (fn && DECL_TEMPLATE_INFO (fn))
4541     arg = tsubst_default_argument (fn, type, arg);
4542
4543   arg = break_out_target_exprs (arg);
4544
4545   if (TREE_CODE (arg) == CONSTRUCTOR)
4546     {
4547       arg = digest_init (type, arg, 0);
4548       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4549                                         "default argument", fn, parmnum);
4550     }
4551   else
4552     {
4553       /* This could get clobbered by the following call.  */
4554       if (TREE_HAS_CONSTRUCTOR (arg))
4555         arg = copy_node (arg);
4556
4557       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4558                                         "default argument", fn, parmnum);
4559       arg = convert_for_arg_passing (type, arg);
4560     }
4561
4562   return arg;
4563 }
4564
4565 /* Returns the type which will really be used for passing an argument of
4566    type TYPE.  */
4567
4568 tree
4569 type_passed_as (tree type)
4570 {
4571   /* Pass classes with copy ctors by invisible reference.  */
4572   if (TREE_ADDRESSABLE (type))
4573     {
4574       type = build_reference_type (type);
4575       /* There are no other pointers to this temporary.  */
4576       type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
4577     }
4578   else if (targetm.calls.promote_prototypes (type)
4579            && INTEGRAL_TYPE_P (type)
4580            && COMPLETE_TYPE_P (type)
4581            && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
4582                                    TYPE_SIZE (integer_type_node)))
4583     type = integer_type_node;
4584
4585   return type;
4586 }
4587
4588 /* Actually perform the appropriate conversion.  */
4589
4590 tree
4591 convert_for_arg_passing (tree type, tree val)
4592 {
4593   if (val == error_mark_node)
4594     ;
4595   /* Pass classes with copy ctors by invisible reference.  */
4596   else if (TREE_ADDRESSABLE (type))
4597     val = build1 (ADDR_EXPR, build_reference_type (type), val);
4598   else if (targetm.calls.promote_prototypes (type)
4599            && INTEGRAL_TYPE_P (type)
4600            && COMPLETE_TYPE_P (type)
4601            && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
4602                                    TYPE_SIZE (integer_type_node)))
4603     val = perform_integral_promotions (val);
4604   return val;
4605 }
4606
4607 /* Returns true iff FN is a function with magic varargs, i.e. ones for
4608    which no conversions at all should be done.  This is true for some
4609    builtins which don't act like normal functions.  */
4610
4611 static bool
4612 magic_varargs_p (tree fn)
4613 {
4614   if (DECL_BUILT_IN (fn))
4615     switch (DECL_FUNCTION_CODE (fn))
4616       {
4617       case BUILT_IN_CLASSIFY_TYPE:
4618       case BUILT_IN_CONSTANT_P:
4619       case BUILT_IN_NEXT_ARG:
4620       case BUILT_IN_STDARG_START:
4621       case BUILT_IN_VA_START:
4622         return true;
4623
4624       default:;
4625       }
4626
4627   return false;
4628 }
4629
4630 /* Subroutine of the various build_*_call functions.  Overload resolution
4631    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4632    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
4633    bitmask of various LOOKUP_* flags which apply to the call itself.  */
4634
4635 static tree
4636 build_over_call (struct z_candidate *cand, int flags)
4637 {
4638   tree fn = cand->fn;
4639   tree args = cand->args;
4640   conversion **convs = cand->convs;
4641   conversion *conv;
4642   tree converted_args = NULL_TREE;
4643   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
4644   tree arg, val;
4645   int i = 0;
4646   int is_method = 0;
4647
4648   /* In a template, there is no need to perform all of the work that
4649      is normally done.  We are only interested in the type of the call
4650      expression, i.e., the return type of the function.  Any semantic
4651      errors will be deferred until the template is instantiated.  */
4652   if (processing_template_decl)
4653     {
4654       tree expr;
4655       tree return_type;
4656       return_type = TREE_TYPE (TREE_TYPE (fn));
4657       expr = build3 (CALL_EXPR, return_type, fn, args, NULL_TREE);
4658       if (TREE_THIS_VOLATILE (fn) && cfun)
4659         current_function_returns_abnormally = 1;
4660       if (!VOID_TYPE_P (return_type))
4661         require_complete_type (return_type);
4662       return convert_from_reference (expr);
4663     }
4664
4665   /* Give any warnings we noticed during overload resolution.  */
4666   if (cand->warnings)
4667     {
4668       struct candidate_warning *w;
4669       for (w = cand->warnings; w; w = w->next)
4670         joust (cand, w->loser, 1);
4671     }
4672
4673   if (DECL_FUNCTION_MEMBER_P (fn))
4674     {
4675       /* If FN is a template function, two cases must be considered.
4676          For example:
4677
4678            struct A {
4679              protected:
4680                template <class T> void f();
4681            };
4682            template <class T> struct B {
4683              protected:
4684                void g();
4685            };
4686            struct C : A, B<int> {
4687              using A::f;        // #1
4688              using B<int>::g;   // #2
4689            };
4690
4691          In case #1 where `A::f' is a member template, DECL_ACCESS is
4692          recorded in the primary template but not in its specialization.
4693          We check access of FN using its primary template.
4694
4695          In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
4696          because it is a member of class template B, DECL_ACCESS is
4697          recorded in the specialization `B<int>::g'.  We cannot use its
4698          primary template because `B<T>::g' and `B<int>::g' may have
4699          different access.  */
4700       if (DECL_TEMPLATE_INFO (fn)
4701           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
4702         perform_or_defer_access_check (cand->access_path,
4703                                        DECL_TI_TEMPLATE (fn));
4704       else
4705         perform_or_defer_access_check (cand->access_path, fn);
4706     }
4707
4708   if (args && TREE_CODE (args) != TREE_LIST)
4709     args = build_tree_list (NULL_TREE, args);
4710   arg = args;
4711
4712   /* The implicit parameters to a constructor are not considered by overload
4713      resolution, and must be of the proper type.  */
4714   if (DECL_CONSTRUCTOR_P (fn))
4715     {
4716       converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
4717       arg = TREE_CHAIN (arg);
4718       parm = TREE_CHAIN (parm);
4719       /* We should never try to call the abstract constructor.  */
4720       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
4721
4722       if (DECL_HAS_VTT_PARM_P (fn))
4723         {
4724           converted_args = tree_cons
4725             (NULL_TREE, TREE_VALUE (arg), converted_args);
4726           arg = TREE_CHAIN (arg);
4727           parm = TREE_CHAIN (parm);
4728         }
4729     }
4730   /* Bypass access control for 'this' parameter.  */
4731   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4732     {
4733       tree parmtype = TREE_VALUE (parm);
4734       tree argtype = TREE_TYPE (TREE_VALUE (arg));
4735       tree converted_arg;
4736       tree base_binfo;
4737
4738       if (convs[i]->bad_p)
4739         pedwarn ("passing %qT as %<this%> argument of %q#D discards qualifiers",
4740                  TREE_TYPE (argtype), fn);
4741
4742       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4743          X is called for an object that is not of type X, or of a type
4744          derived from X, the behavior is undefined.
4745
4746          So we can assume that anything passed as 'this' is non-null, and
4747          optimize accordingly.  */
4748       gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
4749       /* Convert to the base in which the function was declared.  */
4750       gcc_assert (cand->conversion_path != NULL_TREE);
4751       converted_arg = build_base_path (PLUS_EXPR,
4752                                        TREE_VALUE (arg),
4753                                        cand->conversion_path,
4754                                        1);
4755       /* Check that the base class is accessible.  */
4756       if (!accessible_base_p (TREE_TYPE (argtype),
4757                               BINFO_TYPE (cand->conversion_path), true))
4758         error ("%qT is not an accessible base of %qT",
4759                BINFO_TYPE (cand->conversion_path),
4760                TREE_TYPE (argtype));
4761       /* If fn was found by a using declaration, the conversion path
4762          will be to the derived class, not the base declaring fn. We
4763          must convert from derived to base.  */
4764       base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
4765                                 TREE_TYPE (parmtype), ba_unique, NULL);
4766       converted_arg = build_base_path (PLUS_EXPR, converted_arg,
4767                                        base_binfo, 1);
4768
4769       converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
4770       parm = TREE_CHAIN (parm);
4771       arg = TREE_CHAIN (arg);
4772       ++i;
4773       is_method = 1;
4774     }
4775
4776   for (; arg && parm;
4777        parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
4778     {
4779       tree type = TREE_VALUE (parm);
4780
4781       conv = convs[i];
4782       val = convert_like_with_context
4783         (conv, TREE_VALUE (arg), fn, i - is_method);
4784
4785       val = convert_for_arg_passing (type, val);
4786       converted_args = tree_cons (NULL_TREE, val, converted_args);
4787     }
4788
4789   /* Default arguments */
4790   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
4791     converted_args
4792       = tree_cons (NULL_TREE,
4793                    convert_default_arg (TREE_VALUE (parm),
4794                                         TREE_PURPOSE (parm),
4795                                         fn, i - is_method),
4796                    converted_args);
4797
4798   /* Ellipsis */
4799   for (; arg; arg = TREE_CHAIN (arg))
4800     {
4801       tree a = TREE_VALUE (arg);
4802       if (magic_varargs_p (fn))
4803         /* Do no conversions for magic varargs.  */;
4804       else
4805         a = convert_arg_to_ellipsis (a);
4806       converted_args = tree_cons (NULL_TREE, a, converted_args);
4807     }
4808
4809   converted_args = nreverse (converted_args);
4810
4811   check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
4812                             converted_args, TYPE_ARG_TYPES (TREE_TYPE (fn)));
4813
4814   /* Avoid actually calling copy constructors and copy assignment operators,
4815      if possible.  */
4816
4817   if (! flag_elide_constructors)
4818     /* Do things the hard way.  */;
4819   else if (cand->num_convs == 1 && DECL_COPY_CONSTRUCTOR_P (fn))
4820     {
4821       tree targ;
4822       arg = skip_artificial_parms_for (fn, converted_args);
4823       arg = TREE_VALUE (arg);
4824
4825       /* Pull out the real argument, disregarding const-correctness.  */
4826       targ = arg;
4827       while (TREE_CODE (targ) == NOP_EXPR
4828              || TREE_CODE (targ) == NON_LVALUE_EXPR
4829              || TREE_CODE (targ) == CONVERT_EXPR)
4830         targ = TREE_OPERAND (targ, 0);
4831       if (TREE_CODE (targ) == ADDR_EXPR)
4832         {
4833           targ = TREE_OPERAND (targ, 0);
4834           if (!same_type_ignoring_top_level_qualifiers_p
4835               (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
4836             targ = NULL_TREE;
4837         }
4838       else
4839         targ = NULL_TREE;
4840
4841       if (targ)
4842         arg = targ;
4843       else
4844         arg = build_indirect_ref (arg, 0);
4845
4846       /* [class.copy]: the copy constructor is implicitly defined even if
4847          the implementation elided its use.  */
4848       if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
4849         mark_used (fn);
4850
4851       /* If we're creating a temp and we already have one, don't create a
4852          new one.  If we're not creating a temp but we get one, use
4853          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
4854          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4855          temp or an INIT_EXPR otherwise.  */
4856       if (integer_zerop (TREE_VALUE (args)))
4857         {
4858           if (TREE_CODE (arg) == TARGET_EXPR)
4859             return arg;
4860           else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4861             return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
4862         }
4863       else if (TREE_CODE (arg) == TARGET_EXPR
4864                || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4865         {
4866           tree to = stabilize_reference
4867             (build_indirect_ref (TREE_VALUE (args), 0));
4868
4869           val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
4870           return val;
4871         }
4872     }
4873   else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
4874            && copy_fn_p (fn)
4875            && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
4876     {
4877       tree to = stabilize_reference
4878         (build_indirect_ref (TREE_VALUE (converted_args), 0));
4879       tree type = TREE_TYPE (to);
4880       tree as_base = CLASSTYPE_AS_BASE (type);
4881
4882       arg = TREE_VALUE (TREE_CHAIN (converted_args));
4883       if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
4884         {
4885           arg = build_indirect_ref (arg, 0);
4886           val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
4887         }
4888       else
4889         {
4890           /* We must only copy the non-tail padding parts.
4891              Use __builtin_memcpy for the bitwise copy.  */
4892
4893           tree args, t;
4894
4895           args = tree_cons (NULL, TYPE_SIZE_UNIT (as_base), NULL);
4896           args = tree_cons (NULL, arg, args);
4897           t = build_unary_op (ADDR_EXPR, to, 0);
4898           args = tree_cons (NULL, t, args);
4899           t = implicit_built_in_decls[BUILT_IN_MEMCPY];
4900           t = build_call (t, args);
4901
4902           t = convert (TREE_TYPE (TREE_VALUE (args)), t);
4903           val = build_indirect_ref (t, 0);
4904         }
4905
4906       return val;
4907     }
4908
4909   mark_used (fn);
4910
4911   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
4912     {
4913       tree t, *p = &TREE_VALUE (converted_args);
4914       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
4915                                 DECL_CONTEXT (fn),
4916                                 ba_any, NULL);
4917       gcc_assert (binfo && binfo != error_mark_node);
4918
4919       *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
4920       if (TREE_SIDE_EFFECTS (*p))
4921         *p = save_expr (*p);
4922       t = build_pointer_type (TREE_TYPE (fn));
4923       if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
4924         fn = build_java_interface_fn_ref (fn, *p);
4925       else
4926         fn = build_vfn_ref (*p, DECL_VINDEX (fn));
4927       TREE_TYPE (fn) = t;
4928     }
4929   else if (DECL_INLINE (fn))
4930     fn = inline_conversion (fn);
4931   else
4932     fn = build_addr_func (fn);
4933
4934   return build_cxx_call (fn, converted_args);
4935 }
4936
4937 /* Build and return a call to FN, using ARGS.  This function performs
4938    no overload resolution, conversion, or other high-level
4939    operations.  */
4940
4941 tree
4942 build_cxx_call (tree fn, tree args)
4943 {
4944   tree fndecl;
4945
4946   fn = build_call (fn, args);
4947
4948   /* If this call might throw an exception, note that fact.  */
4949   fndecl = get_callee_fndecl (fn);
4950   if ((!fndecl || !TREE_NOTHROW (fndecl))
4951       && at_function_scope_p ()
4952       && cfun)
4953     cp_function_chain->can_throw = 1;
4954
4955   /* Some built-in function calls will be evaluated at compile-time in
4956      fold ().  */
4957   fn = fold_if_not_in_template (fn);
4958
4959   if (VOID_TYPE_P (TREE_TYPE (fn)))
4960     return fn;
4961
4962   fn = require_complete_type (fn);
4963   if (fn == error_mark_node)
4964     return error_mark_node;
4965
4966   if (IS_AGGR_TYPE (TREE_TYPE (fn)))
4967     fn = build_cplus_new (TREE_TYPE (fn), fn);
4968   return convert_from_reference (fn);
4969 }
4970
4971 static GTY(()) tree java_iface_lookup_fn;
4972
4973 /* Make an expression which yields the address of the Java interface
4974    method FN.  This is achieved by generating a call to libjava's
4975    _Jv_LookupInterfaceMethodIdx().  */
4976
4977 static tree
4978 build_java_interface_fn_ref (tree fn, tree instance)
4979 {
4980   tree lookup_args, lookup_fn, method, idx;
4981   tree klass_ref, iface, iface_ref;
4982   int i;
4983
4984   if (!java_iface_lookup_fn)
4985     {
4986       tree endlink = build_void_list_node ();
4987       tree t = tree_cons (NULL_TREE, ptr_type_node,
4988                           tree_cons (NULL_TREE, ptr_type_node,
4989                                      tree_cons (NULL_TREE, java_int_type_node,
4990                                                 endlink)));
4991       java_iface_lookup_fn
4992         = builtin_function ("_Jv_LookupInterfaceMethodIdx",
4993                             build_function_type (ptr_type_node, t),
4994                             0, NOT_BUILT_IN, NULL, NULL_TREE);
4995     }
4996
4997   /* Look up the pointer to the runtime java.lang.Class object for `instance'.
4998      This is the first entry in the vtable.  */
4999   klass_ref = build_vtbl_ref (build_indirect_ref (instance, 0),
5000                               integer_zero_node);
5001
5002   /* Get the java.lang.Class pointer for the interface being called.  */
5003   iface = DECL_CONTEXT (fn);
5004   iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
5005   if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
5006       || DECL_CONTEXT (iface_ref) != iface)
5007     {
5008       error ("could not find class$ field in java interface type %qT",
5009                 iface);
5010       return error_mark_node;
5011     }
5012   iface_ref = build_address (iface_ref);
5013   iface_ref = convert (build_pointer_type (iface), iface_ref);
5014
5015   /* Determine the itable index of FN.  */
5016   i = 1;
5017   for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
5018     {
5019       if (!DECL_VIRTUAL_P (method))
5020         continue;
5021       if (fn == method)
5022         break;
5023       i++;
5024     }
5025   idx = build_int_cst (NULL_TREE, i);
5026
5027   lookup_args = tree_cons (NULL_TREE, klass_ref,
5028                            tree_cons (NULL_TREE, iface_ref,
5029                                       build_tree_list (NULL_TREE, idx)));
5030   lookup_fn = build1 (ADDR_EXPR,
5031                       build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
5032                       java_iface_lookup_fn);
5033   return build3 (CALL_EXPR, ptr_type_node, lookup_fn, lookup_args, NULL_TREE);
5034 }
5035
5036 /* Returns the value to use for the in-charge parameter when making a
5037    call to a function with the indicated NAME.
5038
5039    FIXME:Can't we find a neater way to do this mapping?  */
5040
5041 tree
5042 in_charge_arg_for_name (tree name)
5043 {
5044  if (name == base_ctor_identifier
5045       || name == base_dtor_identifier)
5046     return integer_zero_node;
5047   else if (name == complete_ctor_identifier)
5048     return integer_one_node;
5049   else if (name == complete_dtor_identifier)
5050     return integer_two_node;
5051   else if (name == deleting_dtor_identifier)
5052     return integer_three_node;
5053
5054   /* This function should only be called with one of the names listed
5055      above.  */
5056   gcc_unreachable ();
5057   return NULL_TREE;
5058 }
5059
5060 /* Build a call to a constructor, destructor, or an assignment
5061    operator for INSTANCE, an expression with class type.  NAME
5062    indicates the special member function to call; ARGS are the
5063    arguments.  BINFO indicates the base of INSTANCE that is to be
5064    passed as the `this' parameter to the member function called.
5065
5066    FLAGS are the LOOKUP_* flags to use when processing the call.
5067
5068    If NAME indicates a complete object constructor, INSTANCE may be
5069    NULL_TREE.  In this case, the caller will call build_cplus_new to
5070    store the newly constructed object into a VAR_DECL.  */
5071
5072 tree
5073 build_special_member_call (tree instance, tree name, tree args,
5074                            tree binfo, int flags)
5075 {
5076   tree fns;
5077   /* The type of the subobject to be constructed or destroyed.  */
5078   tree class_type;
5079
5080   gcc_assert (name == complete_ctor_identifier
5081               || name == base_ctor_identifier
5082               || name == complete_dtor_identifier
5083               || name == base_dtor_identifier
5084               || name == deleting_dtor_identifier
5085               || name == ansi_assopname (NOP_EXPR));
5086   if (TYPE_P (binfo))
5087     {
5088       /* Resolve the name.  */
5089       if (!complete_type_or_else (binfo, NULL_TREE))
5090         return error_mark_node;
5091
5092       binfo = TYPE_BINFO (binfo);
5093     }
5094
5095   gcc_assert (binfo != NULL_TREE);
5096
5097   class_type = BINFO_TYPE (binfo);
5098
5099   /* Handle the special case where INSTANCE is NULL_TREE.  */
5100   if (name == complete_ctor_identifier && !instance)
5101     {
5102       instance = build_int_cst (build_pointer_type (class_type), 0);
5103       instance = build1 (INDIRECT_REF, class_type, instance);
5104     }
5105   else
5106     {
5107       if (name == complete_dtor_identifier
5108           || name == base_dtor_identifier
5109           || name == deleting_dtor_identifier)
5110         gcc_assert (args == NULL_TREE);
5111
5112       /* Convert to the base class, if necessary.  */
5113       if (!same_type_ignoring_top_level_qualifiers_p
5114           (TREE_TYPE (instance), BINFO_TYPE (binfo)))
5115         {
5116           if (name != ansi_assopname (NOP_EXPR))
5117             /* For constructors and destructors, either the base is
5118                non-virtual, or it is virtual but we are doing the
5119                conversion from a constructor or destructor for the
5120                complete object.  In either case, we can convert
5121                statically.  */
5122             instance = convert_to_base_statically (instance, binfo);
5123           else
5124             /* However, for assignment operators, we must convert
5125                dynamically if the base is virtual.  */
5126             instance = build_base_path (PLUS_EXPR, instance,
5127                                         binfo, /*nonnull=*/1);
5128         }
5129     }
5130
5131   gcc_assert (instance != NULL_TREE);
5132
5133   fns = lookup_fnfields (binfo, name, 1);
5134
5135   /* When making a call to a constructor or destructor for a subobject
5136      that uses virtual base classes, pass down a pointer to a VTT for
5137      the subobject.  */
5138   if ((name == base_ctor_identifier
5139        || name == base_dtor_identifier)
5140       && CLASSTYPE_VBASECLASSES (class_type))
5141     {
5142       tree vtt;
5143       tree sub_vtt;
5144
5145       /* If the current function is a complete object constructor
5146          or destructor, then we fetch the VTT directly.
5147          Otherwise, we look it up using the VTT we were given.  */
5148       vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
5149       vtt = decay_conversion (vtt);
5150       vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
5151                     build2 (EQ_EXPR, boolean_type_node,
5152                             current_in_charge_parm, integer_zero_node),
5153                     current_vtt_parm,
5154                     vtt);
5155       gcc_assert (BINFO_SUBVTT_INDEX (binfo));
5156       sub_vtt = build2 (PLUS_EXPR, TREE_TYPE (vtt), vtt,
5157                         BINFO_SUBVTT_INDEX (binfo));
5158
5159       args = tree_cons (NULL_TREE, sub_vtt, args);
5160     }
5161
5162   return build_new_method_call (instance, fns, args,
5163                                 TYPE_BINFO (BINFO_TYPE (binfo)),
5164                                 flags);
5165 }
5166
5167 /* Return the NAME, as a C string.  The NAME indicates a function that
5168    is a member of TYPE.  *FREE_P is set to true if the caller must
5169    free the memory returned.
5170
5171    Rather than go through all of this, we should simply set the names
5172    of constructors and destructors appropriately, and dispense with
5173    ctor_identifier, dtor_identifier, etc.  */
5174
5175 static char *
5176 name_as_c_string (tree name, tree type, bool *free_p)
5177 {
5178   char *pretty_name;
5179
5180   /* Assume that we will not allocate memory.  */
5181   *free_p = false;
5182   /* Constructors and destructors are special.  */
5183   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5184     {
5185       pretty_name
5186         = (char *) IDENTIFIER_POINTER (constructor_name (type));
5187       /* For a destructor, add the '~'.  */
5188       if (name == complete_dtor_identifier
5189           || name == base_dtor_identifier
5190           || name == deleting_dtor_identifier)
5191         {
5192           pretty_name = concat ("~", pretty_name, NULL);
5193           /* Remember that we need to free the memory allocated.  */
5194           *free_p = true;
5195         }
5196     }
5197   else if (IDENTIFIER_TYPENAME_P (name))
5198     {
5199       pretty_name = concat ("operator ",
5200                             type_as_string (TREE_TYPE (name),
5201                                             TFF_PLAIN_IDENTIFIER),
5202                             NULL);
5203       /* Remember that we need to free the memory allocated.  */
5204       *free_p = true;
5205     }
5206   else
5207     pretty_name = (char *) IDENTIFIER_POINTER (name);
5208
5209   return pretty_name;
5210 }
5211
5212 /* Build a call to "INSTANCE.FN (ARGS)".  */
5213
5214 tree
5215 build_new_method_call (tree instance, tree fns, tree args,
5216                        tree conversion_path, int flags)
5217 {
5218   struct z_candidate *candidates = 0, *cand;
5219   tree explicit_targs = NULL_TREE;
5220   tree basetype = NULL_TREE;
5221   tree access_binfo;
5222   tree optype;
5223   tree mem_args = NULL_TREE, instance_ptr;
5224   tree name;
5225   tree user_args;
5226   tree call;
5227   tree fn;
5228   tree class_type;
5229   int template_only = 0;
5230   bool any_viable_p;
5231   tree orig_instance;
5232   tree orig_fns;
5233   tree orig_args;
5234   void *p;
5235
5236   gcc_assert (instance != NULL_TREE);
5237
5238   if (error_operand_p (instance)
5239       || error_operand_p (fns)
5240       || args == error_mark_node)
5241     return error_mark_node;
5242
5243   orig_instance = instance;
5244   orig_fns = fns;
5245   orig_args = args;
5246
5247   if (processing_template_decl)
5248     {
5249       instance = build_non_dependent_expr (instance);
5250       if (!BASELINK_P (fns)
5251           && TREE_CODE (fns) != PSEUDO_DTOR_EXPR
5252           && TREE_TYPE (fns) != unknown_type_node)
5253         fns = build_non_dependent_expr (fns);
5254       args = build_non_dependent_args (orig_args);
5255     }
5256
5257   /* Process the argument list.  */
5258   user_args = args;
5259   args = resolve_args (args);
5260   if (args == error_mark_node)
5261     return error_mark_node;
5262
5263   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
5264   instance_ptr = build_this (instance);
5265
5266   if (!BASELINK_P (fns))
5267     {
5268       error ("call to non-function %qD", fns);
5269       return error_mark_node;
5270     }
5271
5272   if (!conversion_path)
5273     conversion_path = BASELINK_BINFO (fns);
5274   access_binfo = BASELINK_ACCESS_BINFO (fns);
5275   optype = BASELINK_OPTYPE (fns);
5276   fns = BASELINK_FUNCTIONS (fns);
5277
5278   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
5279     {
5280       explicit_targs = TREE_OPERAND (fns, 1);
5281       fns = TREE_OPERAND (fns, 0);
5282       template_only = 1;
5283     }
5284
5285   gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
5286               || TREE_CODE (fns) == TEMPLATE_DECL
5287               || TREE_CODE (fns) == OVERLOAD);
5288
5289   /* XXX this should be handled before we get here.  */
5290   if (! IS_AGGR_TYPE (basetype))
5291     {
5292       if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5293         error ("request for member %qD in %qE, which is of non-aggregate "
5294                "type %qT",
5295                fns, instance, basetype);
5296
5297       return error_mark_node;
5298     }
5299
5300   fn = get_first_fn (fns);
5301   name = DECL_NAME (fn);
5302
5303   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5304     {
5305       /* Callers should explicitly indicate whether they want to construct
5306          the complete object or just the part without virtual bases.  */
5307       gcc_assert (name != ctor_identifier);
5308       /* Similarly for destructors.  */
5309       gcc_assert (name != dtor_identifier);
5310     }
5311
5312   /* It's OK to call destructors on cv-qualified objects.  Therefore,
5313      convert the INSTANCE_PTR to the unqualified type, if necessary.  */
5314   if (DECL_DESTRUCTOR_P (fn))
5315     {
5316       tree type = build_pointer_type (basetype);
5317       if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5318         instance_ptr = build_nop (type, instance_ptr);
5319     }
5320
5321   class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5322   mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5323
5324   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
5325   p = conversion_obstack_alloc (0);
5326
5327   for (fn = fns; fn; fn = OVL_NEXT (fn))
5328     {
5329       tree t = OVL_CURRENT (fn);
5330       tree this_arglist;
5331
5332       /* We can end up here for copy-init of same or base class.  */
5333       if ((flags & LOOKUP_ONLYCONVERTING)
5334           && DECL_NONCONVERTING_P (t))
5335         continue;
5336
5337       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5338         this_arglist = mem_args;
5339       else
5340         this_arglist = args;
5341
5342       if (TREE_CODE (t) == TEMPLATE_DECL)
5343         /* A member template.  */
5344         add_template_candidate (&candidates, t,
5345                                 class_type,
5346                                 explicit_targs,
5347                                 this_arglist, optype,
5348                                 access_binfo,
5349                                 conversion_path,
5350                                 flags,
5351                                 DEDUCE_CALL);
5352       else if (! template_only)
5353         add_function_candidate (&candidates, t,
5354                                 class_type,
5355                                 this_arglist,
5356                                 access_binfo,
5357                                 conversion_path,
5358                                 flags);
5359     }
5360
5361   candidates = splice_viable (candidates, pedantic, &any_viable_p);
5362   if (!any_viable_p)
5363     {
5364       if (!COMPLETE_TYPE_P (basetype))
5365         cxx_incomplete_type_error (instance_ptr, basetype);
5366       else
5367         {
5368           char *pretty_name;
5369           bool free_p;
5370
5371           pretty_name = name_as_c_string (name, basetype, &free_p);
5372           error ("no matching function for call to %<%T::%s(%A)%#V%>",
5373                  basetype, pretty_name, user_args,
5374                  TREE_TYPE (TREE_TYPE (instance_ptr)));
5375           if (free_p)
5376             free (pretty_name);
5377         }
5378       print_z_candidates (candidates);
5379       call = error_mark_node;
5380     }
5381   else
5382     {
5383       cand = tourney (candidates);
5384       if (cand == 0)
5385         {
5386           char *pretty_name;
5387           bool free_p;
5388
5389           pretty_name = name_as_c_string (name, basetype, &free_p);
5390           error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
5391                  user_args);
5392           print_z_candidates (candidates);
5393           if (free_p)
5394             free (pretty_name);
5395           call = error_mark_node;
5396         }
5397       else
5398         {
5399           if (!(flags & LOOKUP_NONVIRTUAL)
5400               && DECL_PURE_VIRTUAL_P (cand->fn)
5401               && instance == current_class_ref
5402               && (DECL_CONSTRUCTOR_P (current_function_decl)
5403                   || DECL_DESTRUCTOR_P (current_function_decl)))
5404             /* This is not an error, it is runtime undefined
5405                behavior.  */
5406             warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
5407                       "abstract virtual %q#D called from constructor"
5408                       : "abstract virtual %q#D called from destructor"),
5409                      cand->fn);
5410
5411           if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5412               && is_dummy_object (instance_ptr))
5413             {
5414               error ("cannot call member function %qD without object",
5415                      cand->fn);
5416               call = error_mark_node;
5417             }
5418           else
5419             {
5420               if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5421                   && resolves_to_fixed_type_p (instance, 0))
5422                 flags |= LOOKUP_NONVIRTUAL;
5423
5424               call = build_over_call (cand, flags);
5425
5426               /* In an expression of the form `a->f()' where `f' turns
5427                  out to be a static member function, `a' is
5428                  none-the-less evaluated.  */
5429               if (TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE
5430                   && !is_dummy_object (instance_ptr)
5431                   && TREE_SIDE_EFFECTS (instance))
5432                 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
5433                                instance, call);
5434             }
5435         }
5436     }
5437
5438   if (processing_template_decl && call != error_mark_node)
5439     call = (build_min_non_dep
5440             (CALL_EXPR, call,
5441              build_min_nt (COMPONENT_REF, orig_instance, orig_fns, NULL_TREE),
5442              orig_args, NULL_TREE));
5443
5444  /* Free all the conversions we allocated.  */
5445   obstack_free (&conversion_obstack, p);
5446
5447   return call;
5448 }
5449
5450 /* Returns true iff standard conversion sequence ICS1 is a proper
5451    subsequence of ICS2.  */
5452
5453 static bool
5454 is_subseq (conversion *ics1, conversion *ics2)
5455 {
5456   /* We can assume that a conversion of the same code
5457      between the same types indicates a subsequence since we only get
5458      here if the types we are converting from are the same.  */
5459
5460   while (ics1->kind == ck_rvalue
5461          || ics1->kind == ck_lvalue)
5462     ics1 = ics1->u.next;
5463
5464   while (1)
5465     {
5466       while (ics2->kind == ck_rvalue
5467              || ics2->kind == ck_lvalue)
5468         ics2 = ics2->u.next;
5469
5470       if (ics2->kind == ck_user
5471           || ics2->kind == ck_ambig
5472           || ics2->kind == ck_identity)
5473         /* At this point, ICS1 cannot be a proper subsequence of
5474            ICS2.  We can get a USER_CONV when we are comparing the
5475            second standard conversion sequence of two user conversion
5476            sequences.  */
5477         return false;
5478
5479       ics2 = ics2->u.next;
5480
5481       if (ics2->kind == ics1->kind
5482           && same_type_p (ics2->type, ics1->type)
5483           && same_type_p (ics2->u.next->type,
5484                           ics1->u.next->type))
5485         return true;
5486     }
5487 }
5488
5489 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
5490    be any _TYPE nodes.  */
5491
5492 bool
5493 is_properly_derived_from (tree derived, tree base)
5494 {
5495   if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5496       || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5497     return false;
5498
5499   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
5500      considers every class derived from itself.  */
5501   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5502           && DERIVED_FROM_P (base, derived));
5503 }
5504
5505 /* We build the ICS for an implicit object parameter as a pointer
5506    conversion sequence.  However, such a sequence should be compared
5507    as if it were a reference conversion sequence.  If ICS is the
5508    implicit conversion sequence for an implicit object parameter,
5509    modify it accordingly.  */
5510
5511 static void
5512 maybe_handle_implicit_object (conversion **ics)
5513 {
5514   if ((*ics)->this_p)
5515     {
5516       /* [over.match.funcs]
5517
5518          For non-static member functions, the type of the
5519          implicit object parameter is "reference to cv X"
5520          where X is the class of which the function is a
5521          member and cv is the cv-qualification on the member
5522          function declaration.  */
5523       conversion *t = *ics;
5524       tree reference_type;
5525
5526       /* The `this' parameter is a pointer to a class type.  Make the
5527          implicit conversion talk about a reference to that same class
5528          type.  */
5529       reference_type = TREE_TYPE (t->type);
5530       reference_type = build_reference_type (reference_type);
5531
5532       if (t->kind == ck_qual)
5533         t = t->u.next;
5534       if (t->kind == ck_ptr)
5535         t = t->u.next;
5536       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
5537       t = direct_reference_binding (reference_type, t);
5538       *ics = t;
5539     }
5540 }
5541
5542 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5543    and return the type to which the reference refers.  Otherwise,
5544    leave *ICS unchanged and return NULL_TREE.  */
5545
5546 static tree
5547 maybe_handle_ref_bind (conversion **ics)
5548 {
5549   if ((*ics)->kind == ck_ref_bind)
5550     {
5551       conversion *old_ics = *ics;
5552       tree type = TREE_TYPE (old_ics->type);
5553       *ics = old_ics->u.next;
5554       (*ics)->user_conv_p = old_ics->user_conv_p;
5555       (*ics)->bad_p = old_ics->bad_p;
5556       return type;
5557     }
5558
5559   return NULL_TREE;
5560 }
5561
5562 /* Compare two implicit conversion sequences according to the rules set out in
5563    [over.ics.rank].  Return values:
5564
5565       1: ics1 is better than ics2
5566      -1: ics2 is better than ics1
5567       0: ics1 and ics2 are indistinguishable */
5568
5569 static int
5570 compare_ics (conversion *ics1, conversion *ics2)
5571 {
5572   tree from_type1;
5573   tree from_type2;
5574   tree to_type1;
5575   tree to_type2;
5576   tree deref_from_type1 = NULL_TREE;
5577   tree deref_from_type2 = NULL_TREE;
5578   tree deref_to_type1 = NULL_TREE;
5579   tree deref_to_type2 = NULL_TREE;
5580   conversion_rank rank1, rank2;
5581
5582   /* REF_BINDING is nonzero if the result of the conversion sequence
5583      is a reference type.   In that case TARGET_TYPE is the
5584      type referred to by the reference.  */
5585   tree target_type1;
5586   tree target_type2;
5587
5588   /* Handle implicit object parameters.  */
5589   maybe_handle_implicit_object (&ics1);
5590   maybe_handle_implicit_object (&ics2);
5591
5592   /* Handle reference parameters.  */
5593   target_type1 = maybe_handle_ref_bind (&ics1);
5594   target_type2 = maybe_handle_ref_bind (&ics2);
5595
5596   /* [over.ics.rank]
5597
5598      When  comparing  the  basic forms of implicit conversion sequences (as
5599      defined in _over.best.ics_)
5600
5601      --a standard conversion sequence (_over.ics.scs_) is a better
5602        conversion sequence than a user-defined conversion sequence
5603        or an ellipsis conversion sequence, and
5604
5605      --a user-defined conversion sequence (_over.ics.user_) is a
5606        better conversion sequence than an ellipsis conversion sequence
5607        (_over.ics.ellipsis_).  */
5608   rank1 = CONVERSION_RANK (ics1);
5609   rank2 = CONVERSION_RANK (ics2);
5610
5611   if (rank1 > rank2)
5612     return -1;
5613   else if (rank1 < rank2)
5614     return 1;
5615
5616   if (rank1 == cr_bad)
5617     {
5618       /* XXX Isn't this an extension? */
5619       /* Both ICS are bad.  We try to make a decision based on what
5620          would have happened if they'd been good.  */
5621       if (ics1->user_conv_p > ics2->user_conv_p
5622           || ics1->rank  > ics2->rank)
5623         return -1;
5624       else if (ics1->user_conv_p < ics2->user_conv_p
5625                || ics1->rank < ics2->rank)
5626         return 1;
5627
5628       /* We couldn't make up our minds; try to figure it out below.  */
5629     }
5630
5631   if (ics1->ellipsis_p)
5632     /* Both conversions are ellipsis conversions.  */
5633     return 0;
5634
5635   /* User-defined  conversion sequence U1 is a better conversion sequence
5636      than another user-defined conversion sequence U2 if they contain the
5637      same user-defined conversion operator or constructor and if the sec-
5638      ond standard conversion sequence of U1 is  better  than  the  second
5639      standard conversion sequence of U2.  */
5640
5641   if (ics1->user_conv_p)
5642     {
5643       conversion *t1;
5644       conversion *t2;
5645
5646       for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
5647         if (t1->kind == ck_ambig)
5648           return 0;
5649       for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
5650         if (t2->kind == ck_ambig)
5651           return 0;
5652
5653       if (t1->cand->fn != t2->cand->fn)
5654         return 0;
5655
5656       /* We can just fall through here, after setting up
5657          FROM_TYPE1 and FROM_TYPE2.  */
5658       from_type1 = t1->type;
5659       from_type2 = t2->type;
5660     }
5661   else
5662     {
5663       conversion *t1;
5664       conversion *t2;
5665
5666       /* We're dealing with two standard conversion sequences.
5667
5668          [over.ics.rank]
5669
5670          Standard conversion sequence S1 is a better conversion
5671          sequence than standard conversion sequence S2 if
5672
5673          --S1 is a proper subsequence of S2 (comparing the conversion
5674            sequences in the canonical form defined by _over.ics.scs_,
5675            excluding any Lvalue Transformation; the identity
5676            conversion sequence is considered to be a subsequence of
5677            any non-identity conversion sequence */
5678
5679       t1 = ics1;
5680       while (t1->kind != ck_identity)
5681         t1 = t1->u.next;
5682       from_type1 = t1->type;
5683
5684       t2 = ics2;
5685       while (t2->kind != ck_identity)
5686         t2 = t2->u.next;
5687       from_type2 = t2->type;
5688     }
5689
5690   if (same_type_p (from_type1, from_type2))
5691     {
5692       if (is_subseq (ics1, ics2))
5693         return 1;
5694       if (is_subseq (ics2, ics1))
5695         return -1;
5696     }
5697   /* Otherwise, one sequence cannot be a subsequence of the other; they
5698      don't start with the same type.  This can happen when comparing the
5699      second standard conversion sequence in two user-defined conversion
5700      sequences.  */
5701
5702   /* [over.ics.rank]
5703
5704      Or, if not that,
5705
5706      --the rank of S1 is better than the rank of S2 (by the rules
5707        defined below):
5708
5709     Standard conversion sequences are ordered by their ranks: an Exact
5710     Match is a better conversion than a Promotion, which is a better
5711     conversion than a Conversion.
5712
5713     Two conversion sequences with the same rank are indistinguishable
5714     unless one of the following rules applies:
5715
5716     --A conversion that is not a conversion of a pointer, or pointer
5717       to member, to bool is better than another conversion that is such
5718       a conversion.
5719
5720     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5721     so that we do not have to check it explicitly.  */
5722   if (ics1->rank < ics2->rank)
5723     return 1;
5724   else if (ics2->rank < ics1->rank)
5725     return -1;
5726
5727   to_type1 = ics1->type;
5728   to_type2 = ics2->type;
5729
5730   if (TYPE_PTR_P (from_type1)
5731       && TYPE_PTR_P (from_type2)
5732       && TYPE_PTR_P (to_type1)
5733       && TYPE_PTR_P (to_type2))
5734     {
5735       deref_from_type1 = TREE_TYPE (from_type1);
5736       deref_from_type2 = TREE_TYPE (from_type2);
5737       deref_to_type1 = TREE_TYPE (to_type1);
5738       deref_to_type2 = TREE_TYPE (to_type2);
5739     }
5740   /* The rules for pointers to members A::* are just like the rules
5741      for pointers A*, except opposite: if B is derived from A then
5742      A::* converts to B::*, not vice versa.  For that reason, we
5743      switch the from_ and to_ variables here.  */
5744   else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
5745             && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
5746            || (TYPE_PTRMEMFUNC_P (from_type1)
5747                && TYPE_PTRMEMFUNC_P (from_type2)
5748                && TYPE_PTRMEMFUNC_P (to_type1)
5749                && TYPE_PTRMEMFUNC_P (to_type2)))
5750     {
5751       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
5752       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
5753       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
5754       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
5755     }
5756
5757   if (deref_from_type1 != NULL_TREE
5758       && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5759       && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5760     {
5761       /* This was one of the pointer or pointer-like conversions.
5762
5763          [over.ics.rank]
5764
5765          --If class B is derived directly or indirectly from class A,
5766            conversion of B* to A* is better than conversion of B* to
5767            void*, and conversion of A* to void* is better than
5768            conversion of B* to void*.  */
5769       if (TREE_CODE (deref_to_type1) == VOID_TYPE
5770           && TREE_CODE (deref_to_type2) == VOID_TYPE)
5771         {
5772           if (is_properly_derived_from (deref_from_type1,
5773                                         deref_from_type2))
5774             return -1;
5775           else if (is_properly_derived_from (deref_from_type2,
5776                                              deref_from_type1))
5777             return 1;
5778         }
5779       else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5780                || TREE_CODE (deref_to_type2) == VOID_TYPE)
5781         {
5782           if (same_type_p (deref_from_type1, deref_from_type2))
5783             {
5784               if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5785                 {
5786                   if (is_properly_derived_from (deref_from_type1,
5787                                                 deref_to_type1))
5788                     return 1;
5789                 }
5790               /* We know that DEREF_TO_TYPE1 is `void' here.  */
5791               else if (is_properly_derived_from (deref_from_type1,
5792                                                  deref_to_type2))
5793                 return -1;
5794             }
5795         }
5796       else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5797                && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5798         {
5799           /* [over.ics.rank]
5800
5801              --If class B is derived directly or indirectly from class A
5802                and class C is derived directly or indirectly from B,
5803
5804              --conversion of C* to B* is better than conversion of C* to
5805                A*,
5806
5807              --conversion of B* to A* is better than conversion of C* to
5808                A*  */
5809           if (same_type_p (deref_from_type1, deref_from_type2))
5810             {
5811               if (is_properly_derived_from (deref_to_type1,
5812                                             deref_to_type2))
5813                 return 1;
5814               else if (is_properly_derived_from (deref_to_type2,
5815                                                  deref_to_type1))
5816                 return -1;
5817             }
5818           else if (same_type_p (deref_to_type1, deref_to_type2))
5819             {
5820               if (is_properly_derived_from (deref_from_type2,
5821                                             deref_from_type1))
5822                 return 1;
5823               else if (is_properly_derived_from (deref_from_type1,
5824                                                  deref_from_type2))
5825                 return -1;
5826             }
5827         }
5828     }
5829   else if (CLASS_TYPE_P (non_reference (from_type1))
5830            && same_type_p (from_type1, from_type2))
5831     {
5832       tree from = non_reference (from_type1);
5833
5834       /* [over.ics.rank]
5835
5836          --binding of an expression of type C to a reference of type
5837            B& is better than binding an expression of type C to a
5838            reference of type A&
5839
5840          --conversion of C to B is better than conversion of C to A,  */
5841       if (is_properly_derived_from (from, to_type1)
5842           && is_properly_derived_from (from, to_type2))
5843         {
5844           if (is_properly_derived_from (to_type1, to_type2))
5845             return 1;
5846           else if (is_properly_derived_from (to_type2, to_type1))
5847             return -1;
5848         }
5849     }
5850   else if (CLASS_TYPE_P (non_reference (to_type1))
5851            && same_type_p (to_type1, to_type2))
5852     {
5853       tree to = non_reference (to_type1);
5854
5855       /* [over.ics.rank]
5856
5857          --binding of an expression of type B to a reference of type
5858            A& is better than binding an expression of type C to a
5859            reference of type A&,
5860
5861          --conversion of B to A is better than conversion of C to A  */
5862       if (is_properly_derived_from (from_type1, to)
5863           && is_properly_derived_from (from_type2, to))
5864         {
5865           if (is_properly_derived_from (from_type2, from_type1))
5866             return 1;
5867           else if (is_properly_derived_from (from_type1, from_type2))
5868             return -1;
5869         }
5870     }
5871
5872   /* [over.ics.rank]
5873
5874      --S1 and S2 differ only in their qualification conversion and  yield
5875        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
5876        qualification signature of type T1 is a proper subset of  the  cv-
5877        qualification signature of type T2  */
5878   if (ics1->kind == ck_qual
5879       && ics2->kind == ck_qual
5880       && same_type_p (from_type1, from_type2))
5881     return comp_cv_qual_signature (to_type1, to_type2);
5882
5883   /* [over.ics.rank]
5884
5885      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5886      types to which the references refer are the same type except for
5887      top-level cv-qualifiers, and the type to which the reference
5888      initialized by S2 refers is more cv-qualified than the type to
5889      which the reference initialized by S1 refers */
5890
5891   if (target_type1 && target_type2
5892       && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5893     return comp_cv_qualification (target_type2, target_type1);
5894
5895   /* Neither conversion sequence is better than the other.  */
5896   return 0;
5897 }
5898
5899 /* The source type for this standard conversion sequence.  */
5900
5901 static tree
5902 source_type (conversion *t)
5903 {
5904   for (;; t = t->u.next)
5905     {
5906       if (t->kind == ck_user
5907           || t->kind == ck_ambig
5908           || t->kind == ck_identity)
5909         return t->type;
5910     }
5911   gcc_unreachable ();
5912 }
5913
5914 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
5915    a pointer to LOSER and re-running joust to produce the warning if WINNER
5916    is actually used.  */
5917
5918 static void
5919 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5920 {
5921   candidate_warning *cw;
5922
5923   cw = conversion_obstack_alloc (sizeof (candidate_warning));
5924   cw->loser = loser;
5925   cw->next = winner->warnings;
5926   winner->warnings = cw;
5927 }
5928
5929 /* Compare two candidates for overloading as described in
5930    [over.match.best].  Return values:
5931
5932       1: cand1 is better than cand2
5933      -1: cand2 is better than cand1
5934       0: cand1 and cand2 are indistinguishable */
5935
5936 static int
5937 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5938 {
5939   int winner = 0;
5940   int off1 = 0, off2 = 0;
5941   size_t i;
5942   size_t len;
5943
5944   /* Candidates that involve bad conversions are always worse than those
5945      that don't.  */
5946   if (cand1->viable > cand2->viable)
5947     return 1;
5948   if (cand1->viable < cand2->viable)
5949     return -1;
5950
5951   /* If we have two pseudo-candidates for conversions to the same type,
5952      or two candidates for the same function, arbitrarily pick one.  */
5953   if (cand1->fn == cand2->fn
5954       && (IS_TYPE_OR_DECL_P (cand1->fn)))
5955     return 1;
5956
5957   /* a viable function F1
5958      is defined to be a better function than another viable function F2  if
5959      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
5960      ICSi(F2), and then */
5961
5962   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
5963      ICSj(F2) */
5964
5965   /* For comparing static and non-static member functions, we ignore
5966      the implicit object parameter of the non-static function.  The
5967      standard says to pretend that the static function has an object
5968      parm, but that won't work with operator overloading.  */
5969   len = cand1->num_convs;
5970   if (len != cand2->num_convs)
5971     {
5972       int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
5973       int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
5974
5975       gcc_assert (static_1 != static_2);
5976
5977       if (static_1)
5978         off2 = 1;
5979       else
5980         {
5981           off1 = 1;
5982           --len;
5983         }
5984     }
5985
5986   for (i = 0; i < len; ++i)
5987     {
5988       conversion *t1 = cand1->convs[i + off1];
5989       conversion *t2 = cand2->convs[i + off2];
5990       int comp = compare_ics (t1, t2);
5991
5992       if (comp != 0)
5993         {
5994           if (warn_sign_promo
5995               && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
5996                   == cr_std + cr_promotion)
5997               && t1->kind == ck_std
5998               && t2->kind == ck_std
5999               && TREE_CODE (t1->type) == INTEGER_TYPE
6000               && TREE_CODE (t2->type) == INTEGER_TYPE
6001               && (TYPE_PRECISION (t1->type)
6002                   == TYPE_PRECISION (t2->type))
6003               && (TYPE_UNSIGNED (t1->u.next->type)
6004                   || (TREE_CODE (t1->u.next->type)
6005                       == ENUMERAL_TYPE)))
6006             {
6007               tree type = t1->u.next->type;
6008               tree type1, type2;
6009               struct z_candidate *w, *l;
6010               if (comp > 0)
6011                 type1 = t1->type, type2 = t2->type,
6012                   w = cand1, l = cand2;
6013               else
6014                 type1 = t2->type, type2 = t1->type,
6015                   w = cand2, l = cand1;
6016
6017               if (warn)
6018                 {
6019                   warning (0, "passing %qT chooses %qT over %qT",
6020                               type, type1, type2);
6021                   warning (0, "  in call to %qD", w->fn);
6022                 }
6023               else
6024                 add_warning (w, l);
6025             }
6026
6027           if (winner && comp != winner)
6028             {
6029               winner = 0;
6030               goto tweak;
6031             }
6032           winner = comp;
6033         }
6034     }
6035
6036   /* warn about confusing overload resolution for user-defined conversions,
6037      either between a constructor and a conversion op, or between two
6038      conversion ops.  */
6039   if (winner && warn_conversion && cand1->second_conv
6040       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
6041       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
6042     {
6043       struct z_candidate *w, *l;
6044       bool give_warning = false;
6045
6046       if (winner == 1)
6047         w = cand1, l = cand2;
6048       else
6049         w = cand2, l = cand1;
6050
6051       /* We don't want to complain about `X::operator T1 ()'
6052          beating `X::operator T2 () const', when T2 is a no less
6053          cv-qualified version of T1.  */
6054       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
6055           && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
6056         {
6057           tree t = TREE_TYPE (TREE_TYPE (l->fn));
6058           tree f = TREE_TYPE (TREE_TYPE (w->fn));
6059
6060           if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
6061             {
6062               t = TREE_TYPE (t);
6063               f = TREE_TYPE (f);
6064             }
6065           if (!comp_ptr_ttypes (t, f))
6066             give_warning = true;
6067         }
6068       else
6069         give_warning = true;
6070
6071       if (!give_warning)
6072         /*NOP*/;
6073       else if (warn)
6074         {
6075           tree source = source_type (w->convs[0]);
6076           if (! DECL_CONSTRUCTOR_P (w->fn))
6077             source = TREE_TYPE (source);
6078           warning (0, "choosing %qD over %qD", w->fn, l->fn);
6079           warning (0, "  for conversion from %qT to %qT",
6080                    source, w->second_conv->type);
6081           warning (0, "  because conversion sequence for the argument is better");
6082         }
6083       else
6084         add_warning (w, l);
6085     }
6086
6087   if (winner)
6088     return winner;
6089
6090   /* or, if not that,
6091      F1 is a non-template function and F2 is a template function
6092      specialization.  */
6093
6094   if (!cand1->template_decl && cand2->template_decl)
6095     return 1;
6096   else if (cand1->template_decl && !cand2->template_decl)
6097     return -1;
6098
6099   /* or, if not that,
6100      F1 and F2 are template functions and the function template for F1 is
6101      more specialized than the template for F2 according to the partial
6102      ordering rules.  */
6103
6104   if (cand1->template_decl && cand2->template_decl)
6105     {
6106       winner = more_specialized_fn
6107         (TI_TEMPLATE (cand1->template_decl),
6108          TI_TEMPLATE (cand2->template_decl),
6109          /* Tell the deduction code how many real function arguments
6110             we saw, not counting the implicit 'this' argument.  But,
6111             add_function_candidate() suppresses the "this" argument
6112             for constructors.
6113
6114             [temp.func.order]: The presence of unused ellipsis and default
6115             arguments has no effect on the partial ordering of function
6116             templates.  */
6117          cand1->num_convs
6118          - (DECL_NONSTATIC_MEMBER_FUNCTION_P (cand1->fn)
6119             - DECL_CONSTRUCTOR_P (cand1->fn)));
6120       if (winner)
6121         return winner;
6122     }
6123
6124   /* or, if not that,
6125      the  context  is  an  initialization by user-defined conversion (see
6126      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
6127      sequence  from  the return type of F1 to the destination type (i.e.,
6128      the type of the entity being initialized)  is  a  better  conversion
6129      sequence  than the standard conversion sequence from the return type
6130      of F2 to the destination type.  */
6131
6132   if (cand1->second_conv)
6133     {
6134       winner = compare_ics (cand1->second_conv, cand2->second_conv);
6135       if (winner)
6136         return winner;
6137     }
6138
6139   /* Check whether we can discard a builtin candidate, either because we
6140      have two identical ones or matching builtin and non-builtin candidates.
6141
6142      (Pedantically in the latter case the builtin which matched the user
6143      function should not be added to the overload set, but we spot it here.
6144
6145      [over.match.oper]
6146      ... the builtin candidates include ...
6147      - do not have the same parameter type list as any non-template
6148        non-member candidate.  */
6149
6150   if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
6151       || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
6152     {
6153       for (i = 0; i < len; ++i)
6154         if (!same_type_p (cand1->convs[i]->type,
6155                           cand2->convs[i]->type))
6156           break;
6157       if (i == cand1->num_convs)
6158         {
6159           if (cand1->fn == cand2->fn)
6160             /* Two built-in candidates; arbitrarily pick one.  */
6161             return 1;
6162           else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6163             /* cand1 is built-in; prefer cand2.  */
6164             return -1;
6165           else
6166             /* cand2 is built-in; prefer cand1.  */
6167             return 1;
6168         }
6169     }
6170
6171   /* If the two functions are the same (this can happen with declarations
6172      in multiple scopes and arg-dependent lookup), arbitrarily choose one.  */
6173   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
6174       && equal_functions (cand1->fn, cand2->fn))
6175     return 1;
6176
6177 tweak:
6178
6179   /* Extension: If the worst conversion for one candidate is worse than the
6180      worst conversion for the other, take the first.  */
6181   if (!pedantic)
6182     {
6183       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
6184       struct z_candidate *w = 0, *l = 0;
6185
6186       for (i = 0; i < len; ++i)
6187         {
6188           if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
6189             rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
6190           if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
6191             rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
6192         }
6193       if (rank1 < rank2)
6194         winner = 1, w = cand1, l = cand2;
6195       if (rank1 > rank2)
6196         winner = -1, w = cand2, l = cand1;
6197       if (winner)
6198         {
6199           if (warn)
6200             {
6201               pedwarn ("\
6202 ISO C++ says that these are ambiguous, even \
6203 though the worst conversion for the first is better than \
6204 the worst conversion for the second:");
6205               print_z_candidate (_("candidate 1:"), w);
6206               print_z_candidate (_("candidate 2:"), l);
6207             }
6208           else
6209             add_warning (w, l);
6210           return winner;
6211         }
6212     }
6213
6214   gcc_assert (!winner);
6215   return 0;
6216 }
6217
6218 /* Given a list of candidates for overloading, find the best one, if any.
6219    This algorithm has a worst case of O(2n) (winner is last), and a best
6220    case of O(n/2) (totally ambiguous); much better than a sorting
6221    algorithm.  */
6222
6223 static struct z_candidate *
6224 tourney (struct z_candidate *candidates)
6225 {
6226   struct z_candidate *champ = candidates, *challenger;
6227   int fate;
6228   int champ_compared_to_predecessor = 0;
6229
6230   /* Walk through the list once, comparing each current champ to the next
6231      candidate, knocking out a candidate or two with each comparison.  */
6232
6233   for (challenger = champ->next; challenger; )
6234     {
6235       fate = joust (champ, challenger, 0);
6236       if (fate == 1)
6237         challenger = challenger->next;
6238       else
6239         {
6240           if (fate == 0)
6241             {
6242               champ = challenger->next;
6243               if (champ == 0)
6244                 return 0;
6245               champ_compared_to_predecessor = 0;
6246             }
6247           else
6248             {
6249               champ = challenger;
6250               champ_compared_to_predecessor = 1;
6251             }
6252
6253           challenger = champ->next;
6254         }
6255     }
6256
6257   /* Make sure the champ is better than all the candidates it hasn't yet
6258      been compared to.  */
6259
6260   for (challenger = candidates;
6261        challenger != champ
6262          && !(champ_compared_to_predecessor && challenger->next == champ);
6263        challenger = challenger->next)
6264     {
6265       fate = joust (champ, challenger, 0);
6266       if (fate != 1)
6267         return 0;
6268     }
6269
6270   return champ;
6271 }
6272
6273 /* Returns nonzero if things of type FROM can be converted to TO.  */
6274
6275 bool
6276 can_convert (tree to, tree from)
6277 {
6278   return can_convert_arg (to, from, NULL_TREE);
6279 }
6280
6281 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
6282
6283 bool
6284 can_convert_arg (tree to, tree from, tree arg)
6285 {
6286   conversion *t;
6287   void *p;
6288   bool ok_p;
6289
6290   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6291   p = conversion_obstack_alloc (0);
6292
6293   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false, 
6294                             LOOKUP_NORMAL);
6295   ok_p = (t && !t->bad_p);
6296
6297   /* Free all the conversions we allocated.  */
6298   obstack_free (&conversion_obstack, p);
6299
6300   return ok_p;
6301 }
6302
6303 /* Like can_convert_arg, but allows dubious conversions as well.  */
6304
6305 bool
6306 can_convert_arg_bad (tree to, tree from, tree arg)
6307 {
6308   conversion *t;
6309   void *p;
6310
6311   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6312   p = conversion_obstack_alloc (0);
6313   /* Try to perform the conversion.  */
6314   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
6315                             LOOKUP_NORMAL);
6316   /* Free all the conversions we allocated.  */
6317   obstack_free (&conversion_obstack, p);
6318
6319   return t != NULL;
6320 }
6321
6322 /* Convert EXPR to TYPE.  Return the converted expression.
6323
6324    Note that we allow bad conversions here because by the time we get to
6325    this point we are committed to doing the conversion.  If we end up
6326    doing a bad conversion, convert_like will complain.  */
6327
6328 tree
6329 perform_implicit_conversion (tree type, tree expr)
6330 {
6331   conversion *conv;
6332   void *p;
6333
6334   if (error_operand_p (expr))
6335     return error_mark_node;
6336
6337   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6338   p = conversion_obstack_alloc (0);
6339
6340   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6341                               /*c_cast_p=*/false,
6342                               LOOKUP_NORMAL);
6343   if (!conv)
6344     {
6345       error ("could not convert %qE to %qT", expr, type);
6346       expr = error_mark_node;
6347     }
6348   else
6349     expr = convert_like (conv, expr);
6350
6351   /* Free all the conversions we allocated.  */
6352   obstack_free (&conversion_obstack, p);
6353
6354   return expr;
6355 }
6356
6357 /* Convert EXPR to TYPE (as a direct-initialization) if that is
6358    permitted.  If the conversion is valid, the converted expression is
6359    returned.  Otherwise, NULL_TREE is returned, except in the case
6360    that TYPE is a class type; in that case, an error is issued.  If
6361    C_CAST_P is true, then this direction initialization is taking
6362    place as part of a static_cast being attempted as part of a C-style
6363    cast.  */
6364
6365 tree
6366 perform_direct_initialization_if_possible (tree type,
6367                                            tree expr,
6368                                            bool c_cast_p)
6369 {
6370   conversion *conv;
6371   void *p;
6372
6373   if (type == error_mark_node || error_operand_p (expr))
6374     return error_mark_node;
6375   /* [dcl.init]
6376
6377      If the destination type is a (possibly cv-qualified) class type:
6378
6379      -- If the initialization is direct-initialization ...,
6380      constructors are considered. ... If no constructor applies, or
6381      the overload resolution is ambiguous, the initialization is
6382      ill-formed.  */
6383   if (CLASS_TYPE_P (type))
6384     {
6385       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6386                                         build_tree_list (NULL_TREE, expr),
6387                                         type, LOOKUP_NORMAL);
6388       return build_cplus_new (type, expr);
6389     }
6390
6391   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6392   p = conversion_obstack_alloc (0);
6393
6394   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6395                               c_cast_p,
6396                               LOOKUP_NORMAL);
6397   if (!conv || conv->bad_p)
6398     expr = NULL_TREE;
6399   else
6400     expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
6401                               /*issue_conversion_warnings=*/false,
6402                               c_cast_p);
6403
6404   /* Free all the conversions we allocated.  */
6405   obstack_free (&conversion_obstack, p);
6406
6407   return expr;
6408 }
6409
6410 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE.  The reference
6411    is being bound to a temporary.  Create and return a new VAR_DECL
6412    with the indicated TYPE; this variable will store the value to
6413    which the reference is bound.  */
6414
6415 tree
6416 make_temporary_var_for_ref_to_temp (tree decl, tree type)
6417 {
6418   tree var;
6419
6420   /* Create the variable.  */
6421   var = build_decl (VAR_DECL, NULL_TREE, type);
6422   DECL_ARTIFICIAL (var) = 1;
6423   DECL_IGNORED_P (var) = 1;
6424   TREE_USED (var) = 1;
6425
6426   /* Register the variable.  */
6427   if (TREE_STATIC (decl))
6428     {
6429       /* Namespace-scope or local static; give it a mangled name.  */
6430       tree name;
6431
6432       TREE_STATIC (var) = 1;
6433       name = mangle_ref_init_variable (decl);
6434       DECL_NAME (var) = name;
6435       SET_DECL_ASSEMBLER_NAME (var, name);
6436       var = pushdecl_top_level (var);
6437     }
6438   else
6439     {
6440       /* Create a new cleanup level if necessary.  */
6441       maybe_push_cleanup_level (type);
6442       /* Don't push unnamed temps.  Do set DECL_CONTEXT, though.  */
6443       DECL_CONTEXT (var) = current_function_decl;
6444     }
6445
6446   return var;
6447 }
6448
6449 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6450    initializing a variable of that TYPE.  If DECL is non-NULL, it is
6451    the VAR_DECL being initialized with the EXPR.  (In that case, the
6452    type of DECL will be TYPE.)  If DECL is non-NULL, then CLEANUP must
6453    also be non-NULL, and with *CLEANUP initialized to NULL.  Upon
6454    return, if *CLEANUP is no longer NULL, it will be an expression
6455    that should be pushed as a cleanup after the returned expression
6456    is used to initialize DECL.
6457
6458    Return the converted expression.  */
6459
6460 tree
6461 initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
6462 {
6463   conversion *conv;
6464   void *p;
6465
6466   if (type == error_mark_node || error_operand_p (expr))
6467     return error_mark_node;
6468
6469   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6470   p = conversion_obstack_alloc (0);
6471
6472   conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
6473   if (!conv || conv->bad_p)
6474     {
6475       if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
6476           && !real_lvalue_p (expr))
6477         error ("invalid initialization of non-const reference of "
6478                "type %qT from a temporary of type %qT",
6479                type, TREE_TYPE (expr));
6480       else
6481         error ("invalid initialization of reference of type "
6482                "%qT from expression of type %qT", type,
6483                TREE_TYPE (expr));
6484       return error_mark_node;
6485     }
6486
6487   /* If DECL is non-NULL, then this special rule applies:
6488
6489        [class.temporary]
6490
6491        The temporary to which the reference is bound or the temporary
6492        that is the complete object to which the reference is bound
6493        persists for the lifetime of the reference.
6494
6495        The temporaries created during the evaluation of the expression
6496        initializing the reference, except the temporary to which the
6497        reference is bound, are destroyed at the end of the
6498        full-expression in which they are created.
6499
6500      In that case, we store the converted expression into a new
6501      VAR_DECL in a new scope.
6502
6503      However, we want to be careful not to create temporaries when
6504      they are not required.  For example, given:
6505
6506        struct B {};
6507        struct D : public B {};
6508        D f();
6509        const B& b = f();
6510
6511      there is no need to copy the return value from "f"; we can just
6512      extend its lifetime.  Similarly, given:
6513
6514        struct S {};
6515        struct T { operator S(); };
6516        T t;
6517        const S& s = t;
6518
6519     we can extend the lifetime of the return value of the conversion
6520     operator.  */
6521   gcc_assert (conv->kind == ck_ref_bind);
6522   if (decl)
6523     {
6524       tree var;
6525       tree base_conv_type;
6526
6527       /* Skip over the REF_BIND.  */
6528       conv = conv->u.next;
6529       /* If the next conversion is a BASE_CONV, skip that too -- but
6530          remember that the conversion was required.  */
6531       if (conv->kind == ck_base)
6532         {
6533           if (conv->check_copy_constructor_p)
6534             check_constructor_callable (TREE_TYPE (expr), expr);
6535           base_conv_type = conv->type;
6536           conv = conv->u.next;
6537         }
6538       else
6539         base_conv_type = NULL_TREE;
6540       /* Perform the remainder of the conversion.  */
6541       expr = convert_like_real (conv, expr,
6542                                 /*fn=*/NULL_TREE, /*argnum=*/0,
6543                                 /*inner=*/-1,
6544                                 /*issue_conversion_warnings=*/true,
6545                                 /*c_cast_p=*/false);
6546       if (error_operand_p (expr))
6547         expr = error_mark_node;
6548       else
6549         {
6550           if (!real_lvalue_p (expr))
6551             {
6552               tree init;
6553               tree type;
6554
6555               /* Create the temporary variable.  */
6556               type = TREE_TYPE (expr);
6557               var = make_temporary_var_for_ref_to_temp (decl, type);
6558               layout_decl (var, 0);
6559               /* If the rvalue is the result of a function call it will be
6560                  a TARGET_EXPR.  If it is some other construct (such as a
6561                  member access expression where the underlying object is
6562                  itself the result of a function call), turn it into a
6563                  TARGET_EXPR here.  It is important that EXPR be a
6564                  TARGET_EXPR below since otherwise the INIT_EXPR will
6565                  attempt to make a bitwise copy of EXPR to initialize
6566                  VAR.  */
6567               if (TREE_CODE (expr) != TARGET_EXPR)
6568                 expr = get_target_expr (expr);
6569               /* Create the INIT_EXPR that will initialize the temporary
6570                  variable.  */
6571               init = build2 (INIT_EXPR, type, var, expr);
6572               if (at_function_scope_p ())
6573                 {
6574                   add_decl_expr (var);
6575                   *cleanup = cxx_maybe_build_cleanup (var);
6576
6577                   /* We must be careful to destroy the temporary only
6578                      after its initialization has taken place.  If the
6579                      initialization throws an exception, then the
6580                      destructor should not be run.  We cannot simply
6581                      transform INIT into something like:
6582
6583                          (INIT, ({ CLEANUP_STMT; }))
6584
6585                      because emit_local_var always treats the
6586                      initializer as a full-expression.  Thus, the
6587                      destructor would run too early; it would run at the
6588                      end of initializing the reference variable, rather
6589                      than at the end of the block enclosing the
6590                      reference variable.
6591
6592                      The solution is to pass back a cleanup expression
6593                      which the caller is responsible for attaching to
6594                      the statement tree.  */
6595                 }
6596               else
6597                 {
6598                   rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
6599                   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6600                     static_aggregates = tree_cons (NULL_TREE, var,
6601                                                    static_aggregates);
6602                 }
6603               /* Use its address to initialize the reference variable.  */
6604               expr = build_address (var);
6605               if (base_conv_type)
6606                 expr = convert_to_base (expr,
6607                                         build_pointer_type (base_conv_type),
6608                                         /*check_access=*/true,
6609                                         /*nonnull=*/true);
6610               expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
6611             }
6612           else
6613             /* Take the address of EXPR.  */
6614             expr = build_unary_op (ADDR_EXPR, expr, 0);
6615           /* If a BASE_CONV was required, perform it now.  */
6616           if (base_conv_type)
6617             expr = (perform_implicit_conversion
6618                     (build_pointer_type (base_conv_type), expr));
6619           expr = build_nop (type, expr);
6620         }
6621     }
6622   else
6623     /* Perform the conversion.  */
6624     expr = convert_like (conv, expr);
6625
6626   /* Free all the conversions we allocated.  */
6627   obstack_free (&conversion_obstack, p);
6628
6629   return expr;
6630 }
6631
6632 #include "gt-cp-call.h"