OSDN Git Service

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