OSDN Git Service

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