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