OSDN Git Service

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