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