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