OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [cp/] [call.c] - Blame information for rev 826

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.