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