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