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