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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [cp/] [typeck.c] - Blame information for rev 710

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 710 jeremybenn
/* Build expressions with type checking for C++ compiler.
2
   Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3
   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4
   2011, 2012
5
   Free Software Foundation, Inc.
6
   Hacked by Michael Tiemann (tiemann@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
/* This file is part of the C++ front end.
26
   It contains routines to build C++ expressions given their operands,
27
   including computing the types of the result, C and C++ specific error
28
   checks, and some optimization.  */
29
 
30
#include "config.h"
31
#include "system.h"
32
#include "coretypes.h"
33
#include "tm.h"
34
#include "tree.h"
35
#include "cp-tree.h"
36
#include "flags.h"
37
#include "output.h"
38
#include "diagnostic.h"
39
#include "intl.h"
40
#include "target.h"
41
#include "convert.h"
42
#include "c-family/c-common.h"
43
#include "c-family/c-objc.h"
44
#include "params.h"
45
 
46
static tree pfn_from_ptrmemfunc (tree);
47
static tree delta_from_ptrmemfunc (tree);
48
static tree convert_for_assignment (tree, tree, impl_conv_rhs, tree, int,
49
                                    tsubst_flags_t, int);
50
static tree cp_pointer_int_sum (enum tree_code, tree, tree);
51
static tree rationalize_conditional_expr (enum tree_code, tree,
52
                                          tsubst_flags_t);
53
static int comp_ptr_ttypes_real (tree, tree, int);
54
static bool comp_except_types (tree, tree, bool);
55
static bool comp_array_types (const_tree, const_tree, bool);
56
static tree pointer_diff (tree, tree, tree);
57
static tree get_delta_difference (tree, tree, bool, bool, tsubst_flags_t);
58
static void casts_away_constness_r (tree *, tree *);
59
static bool casts_away_constness (tree, tree);
60
static void maybe_warn_about_returning_address_of_local (tree);
61
static tree lookup_destructor (tree, tree, tree);
62
static void warn_args_num (location_t, tree, bool);
63
static int convert_arguments (tree, VEC(tree,gc) **, tree, int,
64
                              tsubst_flags_t);
65
 
66
/* Do `exp = require_complete_type (exp);' to make sure exp
67
   does not have an incomplete type.  (That includes void types.)
68
   Returns error_mark_node if the VALUE does not have
69
   complete type when this function returns.  */
70
 
71
tree
72
require_complete_type_sfinae (tree value, tsubst_flags_t complain)
73
{
74
  tree type;
75
 
76
  if (processing_template_decl || value == error_mark_node)
77
    return value;
78
 
79
  if (TREE_CODE (value) == OVERLOAD)
80
    type = unknown_type_node;
81
  else
82
    type = TREE_TYPE (value);
83
 
84
  if (type == error_mark_node)
85
    return error_mark_node;
86
 
87
  /* First, detect a valid value with a complete type.  */
88
  if (COMPLETE_TYPE_P (type))
89
    return value;
90
 
91
  if (complete_type_or_maybe_complain (type, value, complain))
92
    return value;
93
  else
94
    return error_mark_node;
95
}
96
 
97
tree
98
require_complete_type (tree value)
99
{
100
  return require_complete_type_sfinae (value, tf_warning_or_error);
101
}
102
 
103
/* Try to complete TYPE, if it is incomplete.  For example, if TYPE is
104
   a template instantiation, do the instantiation.  Returns TYPE,
105
   whether or not it could be completed, unless something goes
106
   horribly wrong, in which case the error_mark_node is returned.  */
107
 
108
tree
109
complete_type (tree type)
110
{
111
  if (type == NULL_TREE)
112
    /* Rather than crash, we return something sure to cause an error
113
       at some point.  */
114
    return error_mark_node;
115
 
116
  if (type == error_mark_node || COMPLETE_TYPE_P (type))
117
    ;
118
  else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
119
    {
120
      tree t = complete_type (TREE_TYPE (type));
121
      unsigned int needs_constructing, has_nontrivial_dtor;
122
      if (COMPLETE_TYPE_P (t) && !dependent_type_p (type))
123
        layout_type (type);
124
      needs_constructing
125
        = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
126
      has_nontrivial_dtor
127
        = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
128
      for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
129
        {
130
          TYPE_NEEDS_CONSTRUCTING (t) = needs_constructing;
131
          TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = has_nontrivial_dtor;
132
        }
133
    }
134
  else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
135
    instantiate_class_template (TYPE_MAIN_VARIANT (type));
136
 
137
  return type;
138
}
139
 
140
/* Like complete_type, but issue an error if the TYPE cannot be completed.
141
   VALUE is used for informative diagnostics.
142
   Returns NULL_TREE if the type cannot be made complete.  */
143
 
144
tree
145
complete_type_or_maybe_complain (tree type, tree value, tsubst_flags_t complain)
146
{
147
  type = complete_type (type);
148
  if (type == error_mark_node)
149
    /* We already issued an error.  */
150
    return NULL_TREE;
151
  else if (!COMPLETE_TYPE_P (type))
152
    {
153
      if (complain & tf_error)
154
        cxx_incomplete_type_diagnostic (value, type, DK_ERROR);
155
      return NULL_TREE;
156
    }
157
  else
158
    return type;
159
}
160
 
161
tree
162
complete_type_or_else (tree type, tree value)
163
{
164
  return complete_type_or_maybe_complain (type, value, tf_warning_or_error);
165
}
166
 
167
/* Return truthvalue of whether type of EXP is instantiated.  */
168
 
169
int
170
type_unknown_p (const_tree exp)
171
{
172
  return (TREE_CODE (exp) == TREE_LIST
173
          || TREE_TYPE (exp) == unknown_type_node);
174
}
175
 
176
 
177
/* Return the common type of two parameter lists.
178
   We assume that comptypes has already been done and returned 1;
179
   if that isn't so, this may crash.
180
 
181
   As an optimization, free the space we allocate if the parameter
182
   lists are already common.  */
183
 
184
static tree
185
commonparms (tree p1, tree p2)
186
{
187
  tree oldargs = p1, newargs, n;
188
  int i, len;
189
  int any_change = 0;
190
 
191
  len = list_length (p1);
192
  newargs = tree_last (p1);
193
 
194
  if (newargs == void_list_node)
195
    i = 1;
196
  else
197
    {
198
      i = 0;
199
      newargs = 0;
200
    }
201
 
202
  for (; i < len; i++)
203
    newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
204
 
205
  n = newargs;
206
 
207
  for (i = 0; p1;
208
       p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
209
    {
210
      if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
211
        {
212
          TREE_PURPOSE (n) = TREE_PURPOSE (p1);
213
          any_change = 1;
214
        }
215
      else if (! TREE_PURPOSE (p1))
216
        {
217
          if (TREE_PURPOSE (p2))
218
            {
219
              TREE_PURPOSE (n) = TREE_PURPOSE (p2);
220
              any_change = 1;
221
            }
222
        }
223
      else
224
        {
225
          if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
226
            any_change = 1;
227
          TREE_PURPOSE (n) = TREE_PURPOSE (p2);
228
        }
229
      if (TREE_VALUE (p1) != TREE_VALUE (p2))
230
        {
231
          any_change = 1;
232
          TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
233
        }
234
      else
235
        TREE_VALUE (n) = TREE_VALUE (p1);
236
    }
237
  if (! any_change)
238
    return oldargs;
239
 
240
  return newargs;
241
}
242
 
243
/* Given a type, perhaps copied for a typedef,
244
   find the "original" version of it.  */
245
static tree
246
original_type (tree t)
247
{
248
  int quals = cp_type_quals (t);
249
  while (t != error_mark_node
250
         && TYPE_NAME (t) != NULL_TREE)
251
    {
252
      tree x = TYPE_NAME (t);
253
      if (TREE_CODE (x) != TYPE_DECL)
254
        break;
255
      x = DECL_ORIGINAL_TYPE (x);
256
      if (x == NULL_TREE)
257
        break;
258
      t = x;
259
    }
260
  return cp_build_qualified_type (t, quals);
261
}
262
 
263
/* Return the common type for two arithmetic types T1 and T2 under the
264
   usual arithmetic conversions.  The default conversions have already
265
   been applied, and enumerated types converted to their compatible
266
   integer types.  */
267
 
268
static tree
269
cp_common_type (tree t1, tree t2)
270
{
271
  enum tree_code code1 = TREE_CODE (t1);
272
  enum tree_code code2 = TREE_CODE (t2);
273
  tree attributes;
274
 
275
 
276
  /* In what follows, we slightly generalize the rules given in [expr] so
277
     as to deal with `long long' and `complex'.  First, merge the
278
     attributes.  */
279
  attributes = (*targetm.merge_type_attributes) (t1, t2);
280
 
281
  if (SCOPED_ENUM_P (t1) || SCOPED_ENUM_P (t2))
282
    {
283
      if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
284
        return build_type_attribute_variant (t1, attributes);
285
      else
286
        return NULL_TREE;
287
    }
288
 
289
  /* FIXME: Attributes.  */
290
  gcc_assert (ARITHMETIC_TYPE_P (t1)
291
              || TREE_CODE (t1) == VECTOR_TYPE
292
              || UNSCOPED_ENUM_P (t1));
293
  gcc_assert (ARITHMETIC_TYPE_P (t2)
294
              || TREE_CODE (t2) == VECTOR_TYPE
295
              || UNSCOPED_ENUM_P (t2));
296
 
297
  /* If one type is complex, form the common type of the non-complex
298
     components, then make that complex.  Use T1 or T2 if it is the
299
     required type.  */
300
  if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
301
    {
302
      tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
303
      tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
304
      tree subtype
305
        = type_after_usual_arithmetic_conversions (subtype1, subtype2);
306
 
307
      if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
308
        return build_type_attribute_variant (t1, attributes);
309
      else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
310
        return build_type_attribute_variant (t2, attributes);
311
      else
312
        return build_type_attribute_variant (build_complex_type (subtype),
313
                                             attributes);
314
    }
315
 
316
  if (code1 == VECTOR_TYPE)
317
    {
318
      /* When we get here we should have two vectors of the same size.
319
         Just prefer the unsigned one if present.  */
320
      if (TYPE_UNSIGNED (t1))
321
        return build_type_attribute_variant (t1, attributes);
322
      else
323
        return build_type_attribute_variant (t2, attributes);
324
    }
325
 
326
  /* If only one is real, use it as the result.  */
327
  if (code1 == REAL_TYPE && code2 != REAL_TYPE)
328
    return build_type_attribute_variant (t1, attributes);
329
  if (code2 == REAL_TYPE && code1 != REAL_TYPE)
330
    return build_type_attribute_variant (t2, attributes);
331
 
332
  /* Both real or both integers; use the one with greater precision.  */
333
  if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
334
    return build_type_attribute_variant (t1, attributes);
335
  else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
336
    return build_type_attribute_variant (t2, attributes);
337
 
338
  /* The types are the same; no need to do anything fancy.  */
339
  if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
340
    return build_type_attribute_variant (t1, attributes);
341
 
342
  if (code1 != REAL_TYPE)
343
    {
344
      /* If one is unsigned long long, then convert the other to unsigned
345
         long long.  */
346
      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
347
          || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
348
        return build_type_attribute_variant (long_long_unsigned_type_node,
349
                                             attributes);
350
      /* If one is a long long, and the other is an unsigned long, and
351
         long long can represent all the values of an unsigned long, then
352
         convert to a long long.  Otherwise, convert to an unsigned long
353
         long.  Otherwise, if either operand is long long, convert the
354
         other to long long.
355
 
356
         Since we're here, we know the TYPE_PRECISION is the same;
357
         therefore converting to long long cannot represent all the values
358
         of an unsigned long, so we choose unsigned long long in that
359
         case.  */
360
      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
361
          || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
362
        {
363
          tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
364
                    ? long_long_unsigned_type_node
365
                    : long_long_integer_type_node);
366
          return build_type_attribute_variant (t, attributes);
367
        }
368
      if (int128_integer_type_node != NULL_TREE
369
          && (same_type_p (TYPE_MAIN_VARIANT (t1),
370
                           int128_integer_type_node)
371
              || same_type_p (TYPE_MAIN_VARIANT (t2),
372
                              int128_integer_type_node)))
373
        {
374
          tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
375
                    ? int128_unsigned_type_node
376
                    : int128_integer_type_node);
377
          return build_type_attribute_variant (t, attributes);
378
        }
379
 
380
      /* Go through the same procedure, but for longs.  */
381
      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
382
          || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
383
        return build_type_attribute_variant (long_unsigned_type_node,
384
                                             attributes);
385
      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
386
          || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
387
        {
388
          tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
389
                    ? long_unsigned_type_node : long_integer_type_node);
390
          return build_type_attribute_variant (t, attributes);
391
        }
392
      /* Otherwise prefer the unsigned one.  */
393
      if (TYPE_UNSIGNED (t1))
394
        return build_type_attribute_variant (t1, attributes);
395
      else
396
        return build_type_attribute_variant (t2, attributes);
397
    }
398
  else
399
    {
400
      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
401
          || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
402
        return build_type_attribute_variant (long_double_type_node,
403
                                             attributes);
404
      if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
405
          || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
406
        return build_type_attribute_variant (double_type_node,
407
                                             attributes);
408
      if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
409
          || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
410
        return build_type_attribute_variant (float_type_node,
411
                                             attributes);
412
 
413
      /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
414
         the standard C++ floating-point types.  Logic earlier in this
415
         function has already eliminated the possibility that
416
         TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
417
         compelling reason to choose one or the other.  */
418
      return build_type_attribute_variant (t1, attributes);
419
    }
420
}
421
 
422
/* T1 and T2 are arithmetic or enumeration types.  Return the type
423
   that will result from the "usual arithmetic conversions" on T1 and
424
   T2 as described in [expr].  */
425
 
426
tree
427
type_after_usual_arithmetic_conversions (tree t1, tree t2)
428
{
429
  gcc_assert (ARITHMETIC_TYPE_P (t1)
430
              || TREE_CODE (t1) == VECTOR_TYPE
431
              || UNSCOPED_ENUM_P (t1));
432
  gcc_assert (ARITHMETIC_TYPE_P (t2)
433
              || TREE_CODE (t2) == VECTOR_TYPE
434
              || UNSCOPED_ENUM_P (t2));
435
 
436
  /* Perform the integral promotions.  We do not promote real types here.  */
437
  if (INTEGRAL_OR_ENUMERATION_TYPE_P (t1)
438
      && INTEGRAL_OR_ENUMERATION_TYPE_P (t2))
439
    {
440
      t1 = type_promotes_to (t1);
441
      t2 = type_promotes_to (t2);
442
    }
443
 
444
  return cp_common_type (t1, t2);
445
}
446
 
447
static void
448
composite_pointer_error (diagnostic_t kind, tree t1, tree t2,
449
                         composite_pointer_operation operation)
450
{
451
  switch (operation)
452
    {
453
    case CPO_COMPARISON:
454
      emit_diagnostic (kind, input_location, 0,
455
                       "comparison between "
456
                       "distinct pointer types %qT and %qT lacks a cast",
457
                       t1, t2);
458
      break;
459
    case CPO_CONVERSION:
460
      emit_diagnostic (kind, input_location, 0,
461
                       "conversion between "
462
                       "distinct pointer types %qT and %qT lacks a cast",
463
                       t1, t2);
464
      break;
465
    case CPO_CONDITIONAL_EXPR:
466
      emit_diagnostic (kind, input_location, 0,
467
                       "conditional expression between "
468
                       "distinct pointer types %qT and %qT lacks a cast",
469
                       t1, t2);
470
      break;
471
    default:
472
      gcc_unreachable ();
473
    }
474
}
475
 
476
/* Subroutine of composite_pointer_type to implement the recursive
477
   case.  See that function for documentation of the parameters.  */
478
 
479
static tree
480
composite_pointer_type_r (tree t1, tree t2,
481
                          composite_pointer_operation operation,
482
                          tsubst_flags_t complain)
483
{
484
  tree pointee1;
485
  tree pointee2;
486
  tree result_type;
487
  tree attributes;
488
 
489
  /* Determine the types pointed to by T1 and T2.  */
490
  if (TREE_CODE (t1) == POINTER_TYPE)
491
    {
492
      pointee1 = TREE_TYPE (t1);
493
      pointee2 = TREE_TYPE (t2);
494
    }
495
  else
496
    {
497
      pointee1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1);
498
      pointee2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2);
499
    }
500
 
501
  /* [expr.rel]
502
 
503
     Otherwise, the composite pointer type is a pointer type
504
     similar (_conv.qual_) to the type of one of the operands,
505
     with a cv-qualification signature (_conv.qual_) that is the
506
     union of the cv-qualification signatures of the operand
507
     types.  */
508
  if (same_type_ignoring_top_level_qualifiers_p (pointee1, pointee2))
509
    result_type = pointee1;
510
  else if ((TREE_CODE (pointee1) == POINTER_TYPE
511
            && TREE_CODE (pointee2) == POINTER_TYPE)
512
           || (TYPE_PTR_TO_MEMBER_P (pointee1)
513
               && TYPE_PTR_TO_MEMBER_P (pointee2)))
514
    {
515
      result_type = composite_pointer_type_r (pointee1, pointee2, operation,
516
                                              complain);
517
      if (result_type == error_mark_node)
518
        return error_mark_node;
519
    }
520
  else
521
    {
522
      if (complain & tf_error)
523
        composite_pointer_error (DK_PERMERROR, t1, t2, operation);
524
      else
525
        return error_mark_node;
526
      result_type = void_type_node;
527
    }
528
  result_type = cp_build_qualified_type (result_type,
529
                                         (cp_type_quals (pointee1)
530
                                          | cp_type_quals (pointee2)));
531
  /* If the original types were pointers to members, so is the
532
     result.  */
533
  if (TYPE_PTR_TO_MEMBER_P (t1))
534
    {
535
      if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
536
                        TYPE_PTRMEM_CLASS_TYPE (t2)))
537
        {
538
          if (complain & tf_error)
539
            composite_pointer_error (DK_PERMERROR, t1, t2, operation);
540
          else
541
            return error_mark_node;
542
        }
543
      result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
544
                                       result_type);
545
    }
546
  else
547
    result_type = build_pointer_type (result_type);
548
 
549
  /* Merge the attributes.  */
550
  attributes = (*targetm.merge_type_attributes) (t1, t2);
551
  return build_type_attribute_variant (result_type, attributes);
552
}
553
 
554
/* Return the composite pointer type (see [expr.rel]) for T1 and T2.
555
   ARG1 and ARG2 are the values with those types.  The OPERATION is to
556
   describe the operation between the pointer types,
557
   in case an error occurs.
558
 
559
   This routine also implements the computation of a common type for
560
   pointers-to-members as per [expr.eq].  */
561
 
562
tree
563
composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2,
564
                        composite_pointer_operation operation,
565
                        tsubst_flags_t complain)
566
{
567
  tree class1;
568
  tree class2;
569
 
570
  /* [expr.rel]
571
 
572
     If one operand is a null pointer constant, the composite pointer
573
     type is the type of the other operand.  */
574
  if (null_ptr_cst_p (arg1))
575
    return t2;
576
  if (null_ptr_cst_p (arg2))
577
    return t1;
578
 
579
  /* We have:
580
 
581
       [expr.rel]
582
 
583
       If one of the operands has type "pointer to cv1 void*", then
584
       the other has type "pointer to cv2T", and the composite pointer
585
       type is "pointer to cv12 void", where cv12 is the union of cv1
586
       and cv2.
587
 
588
    If either type is a pointer to void, make sure it is T1.  */
589
  if (TREE_CODE (t2) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t2)))
590
    {
591
      tree t;
592
      t = t1;
593
      t1 = t2;
594
      t2 = t;
595
    }
596
 
597
  /* Now, if T1 is a pointer to void, merge the qualifiers.  */
598
  if (TREE_CODE (t1) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t1)))
599
    {
600
      tree attributes;
601
      tree result_type;
602
 
603
      if (TYPE_PTRFN_P (t2) && (complain & tf_error))
604
        {
605
          switch (operation)
606
              {
607
              case CPO_COMPARISON:
608
                pedwarn (input_location, OPT_pedantic,
609
                         "ISO C++ forbids comparison between "
610
                         "pointer of type %<void *%> and pointer-to-function");
611
                break;
612
              case CPO_CONVERSION:
613
                pedwarn (input_location, OPT_pedantic,
614
                         "ISO C++ forbids conversion between "
615
                         "pointer of type %<void *%> and pointer-to-function");
616
                break;
617
              case CPO_CONDITIONAL_EXPR:
618
                pedwarn (input_location, OPT_pedantic,
619
                         "ISO C++ forbids conditional expression between "
620
                         "pointer of type %<void *%> and pointer-to-function");
621
                break;
622
              default:
623
                gcc_unreachable ();
624
              }
625
        }
626
      result_type
627
        = cp_build_qualified_type (void_type_node,
628
                                   (cp_type_quals (TREE_TYPE (t1))
629
                                    | cp_type_quals (TREE_TYPE (t2))));
630
      result_type = build_pointer_type (result_type);
631
      /* Merge the attributes.  */
632
      attributes = (*targetm.merge_type_attributes) (t1, t2);
633
      return build_type_attribute_variant (result_type, attributes);
634
    }
635
 
636
  if (c_dialect_objc () && TREE_CODE (t1) == POINTER_TYPE
637
      && TREE_CODE (t2) == POINTER_TYPE)
638
    {
639
      if (objc_have_common_type (t1, t2, -3, NULL_TREE))
640
        return objc_common_type (t1, t2);
641
    }
642
 
643
  /* [expr.eq] permits the application of a pointer conversion to
644
     bring the pointers to a common type.  */
645
  if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE
646
      && CLASS_TYPE_P (TREE_TYPE (t1))
647
      && CLASS_TYPE_P (TREE_TYPE (t2))
648
      && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t1),
649
                                                     TREE_TYPE (t2)))
650
    {
651
      class1 = TREE_TYPE (t1);
652
      class2 = TREE_TYPE (t2);
653
 
654
      if (DERIVED_FROM_P (class1, class2))
655
        t2 = (build_pointer_type
656
              (cp_build_qualified_type (class1, cp_type_quals (class2))));
657
      else if (DERIVED_FROM_P (class2, class1))
658
        t1 = (build_pointer_type
659
              (cp_build_qualified_type (class2, cp_type_quals (class1))));
660
      else
661
        {
662
          if (complain & tf_error)
663
            composite_pointer_error (DK_ERROR, t1, t2, operation);
664
          return error_mark_node;
665
        }
666
    }
667
  /* [expr.eq] permits the application of a pointer-to-member
668
     conversion to change the class type of one of the types.  */
669
  else if (TYPE_PTR_TO_MEMBER_P (t1)
670
           && !same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
671
                            TYPE_PTRMEM_CLASS_TYPE (t2)))
672
    {
673
      class1 = TYPE_PTRMEM_CLASS_TYPE (t1);
674
      class2 = TYPE_PTRMEM_CLASS_TYPE (t2);
675
 
676
      if (DERIVED_FROM_P (class1, class2))
677
        t1 = build_ptrmem_type (class2, TYPE_PTRMEM_POINTED_TO_TYPE (t1));
678
      else if (DERIVED_FROM_P (class2, class1))
679
        t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2));
680
      else
681
        {
682
          if (complain & tf_error)
683
            switch (operation)
684
              {
685
              case CPO_COMPARISON:
686
                error ("comparison between distinct "
687
                       "pointer-to-member types %qT and %qT lacks a cast",
688
                       t1, t2);
689
                break;
690
              case CPO_CONVERSION:
691
                error ("conversion between distinct "
692
                       "pointer-to-member types %qT and %qT lacks a cast",
693
                       t1, t2);
694
                break;
695
              case CPO_CONDITIONAL_EXPR:
696
                error ("conditional expression between distinct "
697
                       "pointer-to-member types %qT and %qT lacks a cast",
698
                       t1, t2);
699
                break;
700
              default:
701
                gcc_unreachable ();
702
              }
703
          return error_mark_node;
704
        }
705
    }
706
 
707
  return composite_pointer_type_r (t1, t2, operation, complain);
708
}
709
 
710
/* Return the merged type of two types.
711
   We assume that comptypes has already been done and returned 1;
712
   if that isn't so, this may crash.
713
 
714
   This just combines attributes and default arguments; any other
715
   differences would cause the two types to compare unalike.  */
716
 
717
tree
718
merge_types (tree t1, tree t2)
719
{
720
  enum tree_code code1;
721
  enum tree_code code2;
722
  tree attributes;
723
 
724
  /* Save time if the two types are the same.  */
725
  if (t1 == t2)
726
    return t1;
727
  if (original_type (t1) == original_type (t2))
728
    return t1;
729
 
730
  /* If one type is nonsense, use the other.  */
731
  if (t1 == error_mark_node)
732
    return t2;
733
  if (t2 == error_mark_node)
734
    return t1;
735
 
736
  /* Merge the attributes.  */
737
  attributes = (*targetm.merge_type_attributes) (t1, t2);
738
 
739
  if (TYPE_PTRMEMFUNC_P (t1))
740
    t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
741
  if (TYPE_PTRMEMFUNC_P (t2))
742
    t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
743
 
744
  code1 = TREE_CODE (t1);
745
  code2 = TREE_CODE (t2);
746
  if (code1 != code2)
747
    {
748
      gcc_assert (code1 == TYPENAME_TYPE || code2 == TYPENAME_TYPE);
749
      if (code1 == TYPENAME_TYPE)
750
        {
751
          t1 = resolve_typename_type (t1, /*only_current_p=*/true);
752
          code1 = TREE_CODE (t1);
753
        }
754
      else
755
        {
756
          t2 = resolve_typename_type (t2, /*only_current_p=*/true);
757
          code2 = TREE_CODE (t2);
758
        }
759
    }
760
 
761
  switch (code1)
762
    {
763
    case POINTER_TYPE:
764
    case REFERENCE_TYPE:
765
      /* For two pointers, do this recursively on the target type.  */
766
      {
767
        tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
768
        int quals = cp_type_quals (t1);
769
 
770
        if (code1 == POINTER_TYPE)
771
          t1 = build_pointer_type (target);
772
        else
773
          t1 = cp_build_reference_type (target, TYPE_REF_IS_RVALUE (t1));
774
        t1 = build_type_attribute_variant (t1, attributes);
775
        t1 = cp_build_qualified_type (t1, quals);
776
 
777
        if (TREE_CODE (target) == METHOD_TYPE)
778
          t1 = build_ptrmemfunc_type (t1);
779
 
780
        return t1;
781
      }
782
 
783
    case OFFSET_TYPE:
784
      {
785
        int quals;
786
        tree pointee;
787
        quals = cp_type_quals (t1);
788
        pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1),
789
                               TYPE_PTRMEM_POINTED_TO_TYPE (t2));
790
        t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
791
                                pointee);
792
        t1 = cp_build_qualified_type (t1, quals);
793
        break;
794
      }
795
 
796
    case ARRAY_TYPE:
797
      {
798
        tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
799
        /* Save space: see if the result is identical to one of the args.  */
800
        if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
801
          return build_type_attribute_variant (t1, attributes);
802
        if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
803
          return build_type_attribute_variant (t2, attributes);
804
        /* Merge the element types, and have a size if either arg has one.  */
805
        t1 = build_cplus_array_type
806
          (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
807
        break;
808
      }
809
 
810
    case FUNCTION_TYPE:
811
      /* Function types: prefer the one that specified arg types.
812
         If both do, merge the arg types.  Also merge the return types.  */
813
      {
814
        tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
815
        tree p1 = TYPE_ARG_TYPES (t1);
816
        tree p2 = TYPE_ARG_TYPES (t2);
817
        tree parms;
818
        tree rval, raises;
819
 
820
        /* Save space: see if the result is identical to one of the args.  */
821
        if (valtype == TREE_TYPE (t1) && ! p2)
822
          return cp_build_type_attribute_variant (t1, attributes);
823
        if (valtype == TREE_TYPE (t2) && ! p1)
824
          return cp_build_type_attribute_variant (t2, attributes);
825
 
826
        /* Simple way if one arg fails to specify argument types.  */
827
        if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
828
          parms = p2;
829
        else if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
830
          parms = p1;
831
        else
832
          parms = commonparms (p1, p2);
833
 
834
        rval = build_function_type (valtype, parms);
835
        gcc_assert (type_memfn_quals (t1) == type_memfn_quals (t2));
836
        rval = apply_memfn_quals (rval, type_memfn_quals (t1));
837
        raises = merge_exception_specifiers (TYPE_RAISES_EXCEPTIONS (t1),
838
                                             TYPE_RAISES_EXCEPTIONS (t2),
839
                                             NULL_TREE);
840
        t1 = build_exception_variant (rval, raises);
841
        break;
842
      }
843
 
844
    case METHOD_TYPE:
845
      {
846
        /* Get this value the long way, since TYPE_METHOD_BASETYPE
847
           is just the main variant of this.  */
848
        tree basetype = class_of_this_parm (t2);
849
        tree raises = merge_exception_specifiers (TYPE_RAISES_EXCEPTIONS (t1),
850
                                                  TYPE_RAISES_EXCEPTIONS (t2),
851
                                                  NULL_TREE);
852
        tree t3;
853
 
854
        /* If this was a member function type, get back to the
855
           original type of type member function (i.e., without
856
           the class instance variable up front.  */
857
        t1 = build_function_type (TREE_TYPE (t1),
858
                                  TREE_CHAIN (TYPE_ARG_TYPES (t1)));
859
        t2 = build_function_type (TREE_TYPE (t2),
860
                                  TREE_CHAIN (TYPE_ARG_TYPES (t2)));
861
        t3 = merge_types (t1, t2);
862
        t3 = build_method_type_directly (basetype, TREE_TYPE (t3),
863
                                         TYPE_ARG_TYPES (t3));
864
        t1 = build_exception_variant (t3, raises);
865
        break;
866
      }
867
 
868
    case TYPENAME_TYPE:
869
      /* There is no need to merge attributes into a TYPENAME_TYPE.
870
         When the type is instantiated it will have whatever
871
         attributes result from the instantiation.  */
872
      return t1;
873
 
874
    default:;
875
    }
876
 
877
  if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes))
878
    return t1;
879
  else if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes))
880
    return t2;
881
  else
882
    return cp_build_type_attribute_variant (t1, attributes);
883
}
884
 
885
/* Return the ARRAY_TYPE type without its domain.  */
886
 
887
tree
888
strip_array_domain (tree type)
889
{
890
  tree t2;
891
  gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
892
  if (TYPE_DOMAIN (type) == NULL_TREE)
893
    return type;
894
  t2 = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
895
  return cp_build_type_attribute_variant (t2, TYPE_ATTRIBUTES (type));
896
}
897
 
898
/* Wrapper around cp_common_type that is used by c-common.c and other
899
   front end optimizations that remove promotions.
900
 
901
   Return the common type for two arithmetic types T1 and T2 under the
902
   usual arithmetic conversions.  The default conversions have already
903
   been applied, and enumerated types converted to their compatible
904
   integer types.  */
905
 
906
tree
907
common_type (tree t1, tree t2)
908
{
909
  /* If one type is nonsense, use the other  */
910
  if (t1 == error_mark_node)
911
    return t2;
912
  if (t2 == error_mark_node)
913
    return t1;
914
 
915
  return cp_common_type (t1, t2);
916
}
917
 
918
/* Return the common type of two pointer types T1 and T2.  This is the
919
   type for the result of most arithmetic operations if the operands
920
   have the given two types.
921
 
922
   We assume that comp_target_types has already been done and returned
923
   nonzero; if that isn't so, this may crash.  */
924
 
925
tree
926
common_pointer_type (tree t1, tree t2)
927
{
928
  gcc_assert ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
929
              || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
930
              || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)));
931
 
932
  return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
933
                                 CPO_CONVERSION, tf_warning_or_error);
934
}
935
 
936
/* Compare two exception specifier types for exactness or subsetness, if
937
   allowed. Returns false for mismatch, true for match (same, or
938
   derived and !exact).
939
 
940
   [except.spec] "If a class X ... objects of class X or any class publicly
941
   and unambiguously derived from X. Similarly, if a pointer type Y * ...
942
   exceptions of type Y * or that are pointers to any type publicly and
943
   unambiguously derived from Y. Otherwise a function only allows exceptions
944
   that have the same type ..."
945
   This does not mention cv qualifiers and is different to what throw
946
   [except.throw] and catch [except.catch] will do. They will ignore the
947
   top level cv qualifiers, and allow qualifiers in the pointer to class
948
   example.
949
 
950
   We implement the letter of the standard.  */
951
 
952
static bool
953
comp_except_types (tree a, tree b, bool exact)
954
{
955
  if (same_type_p (a, b))
956
    return true;
957
  else if (!exact)
958
    {
959
      if (cp_type_quals (a) || cp_type_quals (b))
960
        return false;
961
 
962
      if (TREE_CODE (a) == POINTER_TYPE
963
          && TREE_CODE (b) == POINTER_TYPE)
964
        {
965
          a = TREE_TYPE (a);
966
          b = TREE_TYPE (b);
967
          if (cp_type_quals (a) || cp_type_quals (b))
968
            return false;
969
        }
970
 
971
      if (TREE_CODE (a) != RECORD_TYPE
972
          || TREE_CODE (b) != RECORD_TYPE)
973
        return false;
974
 
975
      if (PUBLICLY_UNIQUELY_DERIVED_P (a, b))
976
        return true;
977
    }
978
  return false;
979
}
980
 
981
/* Return true if TYPE1 and TYPE2 are equivalent exception specifiers.
982
   If EXACT is ce_derived, T2 can be stricter than T1 (according to 15.4/5).
983
   If EXACT is ce_normal, the compatibility rules in 15.4/3 apply.
984
   If EXACT is ce_exact, the specs must be exactly the same. Exception lists
985
   are unordered, but we've already filtered out duplicates. Most lists will
986
   be in order, we should try to make use of that.  */
987
 
988
bool
989
comp_except_specs (const_tree t1, const_tree t2, int exact)
990
{
991
  const_tree probe;
992
  const_tree base;
993
  int  length = 0;
994
 
995
  if (t1 == t2)
996
    return true;
997
 
998
  /* First handle noexcept.  */
999
  if (exact < ce_exact)
1000
    {
1001
      /* noexcept(false) is compatible with no exception-specification,
1002
         and stricter than any spec.  */
1003
      if (t1 == noexcept_false_spec)
1004
        return t2 == NULL_TREE || exact == ce_derived;
1005
      /* Even a derived noexcept(false) is compatible with no
1006
         exception-specification.  */
1007
      if (t2 == noexcept_false_spec)
1008
        return t1 == NULL_TREE;
1009
 
1010
      /* Otherwise, if we aren't looking for an exact match, noexcept is
1011
         equivalent to throw().  */
1012
      if (t1 == noexcept_true_spec)
1013
        t1 = empty_except_spec;
1014
      if (t2 == noexcept_true_spec)
1015
        t2 = empty_except_spec;
1016
    }
1017
 
1018
  /* If any noexcept is left, it is only comparable to itself;
1019
     either we're looking for an exact match or we're redeclaring a
1020
     template with dependent noexcept.  */
1021
  if ((t1 && TREE_PURPOSE (t1))
1022
      || (t2 && TREE_PURPOSE (t2)))
1023
    return (t1 && t2
1024
            && cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)));
1025
 
1026
  if (t1 == NULL_TREE)                     /* T1 is ...  */
1027
    return t2 == NULL_TREE || exact == ce_derived;
1028
  if (!TREE_VALUE (t1))                    /* t1 is EMPTY */
1029
    return t2 != NULL_TREE && !TREE_VALUE (t2);
1030
  if (t2 == NULL_TREE)                     /* T2 is ...  */
1031
    return false;
1032
  if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
1033
    return exact == ce_derived;
1034
 
1035
  /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
1036
     Count how many we find, to determine exactness. For exact matching and
1037
     ordered T1, T2, this is an O(n) operation, otherwise its worst case is
1038
     O(nm).  */
1039
  for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
1040
    {
1041
      for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
1042
        {
1043
          tree a = TREE_VALUE (probe);
1044
          tree b = TREE_VALUE (t2);
1045
 
1046
          if (comp_except_types (a, b, exact))
1047
            {
1048
              if (probe == base && exact > ce_derived)
1049
                base = TREE_CHAIN (probe);
1050
              length++;
1051
              break;
1052
            }
1053
        }
1054
      if (probe == NULL_TREE)
1055
        return false;
1056
    }
1057
  return exact == ce_derived || base == NULL_TREE || length == list_length (t1);
1058
}
1059
 
1060
/* Compare the array types T1 and T2.  ALLOW_REDECLARATION is true if
1061
   [] can match [size].  */
1062
 
1063
static bool
1064
comp_array_types (const_tree t1, const_tree t2, bool allow_redeclaration)
1065
{
1066
  tree d1;
1067
  tree d2;
1068
  tree max1, max2;
1069
 
1070
  if (t1 == t2)
1071
    return true;
1072
 
1073
  /* The type of the array elements must be the same.  */
1074
  if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1075
    return false;
1076
 
1077
  d1 = TYPE_DOMAIN (t1);
1078
  d2 = TYPE_DOMAIN (t2);
1079
 
1080
  if (d1 == d2)
1081
    return true;
1082
 
1083
  /* If one of the arrays is dimensionless, and the other has a
1084
     dimension, they are of different types.  However, it is valid to
1085
     write:
1086
 
1087
       extern int a[];
1088
       int a[3];
1089
 
1090
     by [basic.link]:
1091
 
1092
       declarations for an array object can specify
1093
       array types that differ by the presence or absence of a major
1094
       array bound (_dcl.array_).  */
1095
  if (!d1 || !d2)
1096
    return allow_redeclaration;
1097
 
1098
  /* Check that the dimensions are the same.  */
1099
 
1100
  if (!cp_tree_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2)))
1101
    return false;
1102
  max1 = TYPE_MAX_VALUE (d1);
1103
  max2 = TYPE_MAX_VALUE (d2);
1104
  if (processing_template_decl && !abi_version_at_least (2)
1105
      && !value_dependent_expression_p (max1)
1106
      && !value_dependent_expression_p (max2))
1107
    {
1108
      /* With abi-1 we do not fold non-dependent array bounds, (and
1109
         consequently mangle them incorrectly).  We must therefore
1110
         fold them here, to verify the domains have the same
1111
         value.  */
1112
      max1 = fold (max1);
1113
      max2 = fold (max2);
1114
    }
1115
 
1116
  if (!cp_tree_equal (max1, max2))
1117
    return false;
1118
 
1119
  return true;
1120
}
1121
 
1122
/* Compare the relative position of T1 and T2 into their respective
1123
   template parameter list.
1124
   T1 and T2 must be template parameter types.
1125
   Return TRUE if T1 and T2 have the same position, FALSE otherwise.  */
1126
 
1127
static bool
1128
comp_template_parms_position (tree t1, tree t2)
1129
{
1130
  tree index1, index2;
1131
  gcc_assert (t1 && t2
1132
              && TREE_CODE (t1) == TREE_CODE (t2)
1133
              && (TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM
1134
                  || TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM
1135
                  || TREE_CODE (t1) == TEMPLATE_TYPE_PARM));
1136
 
1137
  index1 = TEMPLATE_TYPE_PARM_INDEX (TYPE_MAIN_VARIANT (t1));
1138
  index2 = TEMPLATE_TYPE_PARM_INDEX (TYPE_MAIN_VARIANT (t2));
1139
 
1140
  /* If T1 and T2 belong to template parm lists of different size,
1141
     let's assume they are different.  */
1142
  if (TEMPLATE_PARM_NUM_SIBLINGS (index1)
1143
      != TEMPLATE_PARM_NUM_SIBLINGS (index2))
1144
    return false;
1145
 
1146
  /* Then compare their relative position.  */
1147
  if (TEMPLATE_PARM_IDX (index1) != TEMPLATE_PARM_IDX (index2)
1148
      || TEMPLATE_PARM_LEVEL (index1) != TEMPLATE_PARM_LEVEL (index2)
1149
      || (TEMPLATE_PARM_PARAMETER_PACK (index1)
1150
          != TEMPLATE_PARM_PARAMETER_PACK (index2)))
1151
    return false;
1152
 
1153
  return true;
1154
}
1155
 
1156
/* Subroutine in comptypes.  */
1157
 
1158
static bool
1159
structural_comptypes (tree t1, tree t2, int strict)
1160
{
1161
  if (t1 == t2)
1162
    return true;
1163
 
1164
  /* Suppress errors caused by previously reported errors.  */
1165
  if (t1 == error_mark_node || t2 == error_mark_node)
1166
    return false;
1167
 
1168
  gcc_assert (TYPE_P (t1) && TYPE_P (t2));
1169
 
1170
  /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
1171
     current instantiation.  */
1172
  if (TREE_CODE (t1) == TYPENAME_TYPE)
1173
    t1 = resolve_typename_type (t1, /*only_current_p=*/true);
1174
 
1175
  if (TREE_CODE (t2) == TYPENAME_TYPE)
1176
    t2 = resolve_typename_type (t2, /*only_current_p=*/true);
1177
 
1178
  if (TYPE_PTRMEMFUNC_P (t1))
1179
    t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
1180
  if (TYPE_PTRMEMFUNC_P (t2))
1181
    t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
1182
 
1183
  /* Different classes of types can't be compatible.  */
1184
  if (TREE_CODE (t1) != TREE_CODE (t2))
1185
    return false;
1186
 
1187
  /* Qualifiers must match.  For array types, we will check when we
1188
     recur on the array element types.  */
1189
  if (TREE_CODE (t1) != ARRAY_TYPE
1190
      && cp_type_quals (t1) != cp_type_quals (t2))
1191
    return false;
1192
  if (TREE_CODE (t1) == FUNCTION_TYPE
1193
      && type_memfn_quals (t1) != type_memfn_quals (t2))
1194
    return false;
1195
  if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
1196
    return false;
1197
 
1198
  /* Allow for two different type nodes which have essentially the same
1199
     definition.  Note that we already checked for equality of the type
1200
     qualifiers (just above).  */
1201
 
1202
  if (TREE_CODE (t1) != ARRAY_TYPE
1203
      && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
1204
    return true;
1205
 
1206
 
1207
  /* Compare the types.  Break out if they could be the same.  */
1208
  switch (TREE_CODE (t1))
1209
    {
1210
    case VOID_TYPE:
1211
    case BOOLEAN_TYPE:
1212
      /* All void and bool types are the same.  */
1213
      break;
1214
 
1215
    case INTEGER_TYPE:
1216
    case FIXED_POINT_TYPE:
1217
    case REAL_TYPE:
1218
      /* With these nodes, we can't determine type equivalence by
1219
         looking at what is stored in the nodes themselves, because
1220
         two nodes might have different TYPE_MAIN_VARIANTs but still
1221
         represent the same type.  For example, wchar_t and int could
1222
         have the same properties (TYPE_PRECISION, TYPE_MIN_VALUE,
1223
         TYPE_MAX_VALUE, etc.), but have different TYPE_MAIN_VARIANTs
1224
         and are distinct types. On the other hand, int and the
1225
         following typedef
1226
 
1227
           typedef int INT __attribute((may_alias));
1228
 
1229
         have identical properties, different TYPE_MAIN_VARIANTs, but
1230
         represent the same type.  The canonical type system keeps
1231
         track of equivalence in this case, so we fall back on it.  */
1232
      return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
1233
 
1234
    case TEMPLATE_TEMPLATE_PARM:
1235
    case BOUND_TEMPLATE_TEMPLATE_PARM:
1236
      if (!comp_template_parms_position (t1, t2))
1237
        return false;
1238
      if (!comp_template_parms
1239
          (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
1240
           DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2))))
1241
        return false;
1242
      if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM)
1243
        break;
1244
      /* Don't check inheritance.  */
1245
      strict = COMPARE_STRICT;
1246
      /* Fall through.  */
1247
 
1248
    case RECORD_TYPE:
1249
    case UNION_TYPE:
1250
      if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2)
1251
          && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2)
1252
              || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM)
1253
          && comp_template_args (TYPE_TI_ARGS (t1), TYPE_TI_ARGS (t2)))
1254
        break;
1255
 
1256
      if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2))
1257
        break;
1258
      else if ((strict & COMPARE_DERIVED) && DERIVED_FROM_P (t2, t1))
1259
        break;
1260
 
1261
      return false;
1262
 
1263
    case OFFSET_TYPE:
1264
      if (!comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2),
1265
                      strict & ~COMPARE_REDECLARATION))
1266
        return false;
1267
      if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1268
        return false;
1269
      break;
1270
 
1271
    case REFERENCE_TYPE:
1272
      if (TYPE_REF_IS_RVALUE (t1) != TYPE_REF_IS_RVALUE (t2))
1273
        return false;
1274
      /* fall through to checks for pointer types */
1275
 
1276
    case POINTER_TYPE:
1277
      if (TYPE_MODE (t1) != TYPE_MODE (t2)
1278
          || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2)
1279
          || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1280
        return false;
1281
      break;
1282
 
1283
    case METHOD_TYPE:
1284
    case FUNCTION_TYPE:
1285
      if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1286
        return false;
1287
      if (!compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)))
1288
        return false;
1289
      break;
1290
 
1291
    case ARRAY_TYPE:
1292
      /* Target types must match incl. qualifiers.  */
1293
      if (!comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION)))
1294
        return false;
1295
      break;
1296
 
1297
    case TEMPLATE_TYPE_PARM:
1298
      /* If T1 and T2 don't have the same relative position in their
1299
         template parameters set, they can't be equal.  */
1300
      if (!comp_template_parms_position (t1, t2))
1301
        return false;
1302
      break;
1303
 
1304
    case TYPENAME_TYPE:
1305
      if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1306
                          TYPENAME_TYPE_FULLNAME (t2)))
1307
        return false;
1308
      /* Qualifiers don't matter on scopes.  */
1309
      if (!same_type_ignoring_top_level_qualifiers_p (TYPE_CONTEXT (t1),
1310
                                                      TYPE_CONTEXT (t2)))
1311
        return false;
1312
      break;
1313
 
1314
    case UNBOUND_CLASS_TEMPLATE:
1315
      if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2)))
1316
        return false;
1317
      if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1318
        return false;
1319
      break;
1320
 
1321
    case COMPLEX_TYPE:
1322
      if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1323
        return false;
1324
      break;
1325
 
1326
    case VECTOR_TYPE:
1327
      if (TYPE_VECTOR_SUBPARTS (t1) != TYPE_VECTOR_SUBPARTS (t2)
1328
          || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1329
        return false;
1330
      break;
1331
 
1332
    case TYPE_PACK_EXPANSION:
1333
      return (same_type_p (PACK_EXPANSION_PATTERN (t1),
1334
                           PACK_EXPANSION_PATTERN (t2))
1335
              && comp_template_args (PACK_EXPANSION_EXTRA_ARGS (t1),
1336
                                     PACK_EXPANSION_EXTRA_ARGS (t2)));
1337
 
1338
    case DECLTYPE_TYPE:
1339
      if (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t1)
1340
          != DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t2)
1341
          || (DECLTYPE_FOR_LAMBDA_CAPTURE (t1)
1342
              != DECLTYPE_FOR_LAMBDA_CAPTURE (t2))
1343
          || (DECLTYPE_FOR_LAMBDA_PROXY (t1)
1344
              != DECLTYPE_FOR_LAMBDA_PROXY (t2))
1345
          || !cp_tree_equal (DECLTYPE_TYPE_EXPR (t1),
1346
                             DECLTYPE_TYPE_EXPR (t2)))
1347
        return false;
1348
      break;
1349
 
1350
    case UNDERLYING_TYPE:
1351
      return same_type_p (UNDERLYING_TYPE_TYPE (t1),
1352
                          UNDERLYING_TYPE_TYPE (t2));
1353
 
1354
    default:
1355
      return false;
1356
    }
1357
 
1358
  /* If we get here, we know that from a target independent POV the
1359
     types are the same.  Make sure the target attributes are also
1360
     the same.  */
1361
  return comp_type_attributes (t1, t2);
1362
}
1363
 
1364
/* Return true if T1 and T2 are related as allowed by STRICT.  STRICT
1365
   is a bitwise-or of the COMPARE_* flags.  */
1366
 
1367
bool
1368
comptypes (tree t1, tree t2, int strict)
1369
{
1370
  if (strict == COMPARE_STRICT)
1371
    {
1372
      if (t1 == t2)
1373
        return true;
1374
 
1375
      if (t1 == error_mark_node || t2 == error_mark_node)
1376
        return false;
1377
 
1378
      if (TYPE_STRUCTURAL_EQUALITY_P (t1) || TYPE_STRUCTURAL_EQUALITY_P (t2))
1379
        /* At least one of the types requires structural equality, so
1380
           perform a deep check. */
1381
        return structural_comptypes (t1, t2, strict);
1382
 
1383
#ifdef ENABLE_CHECKING
1384
      if (USE_CANONICAL_TYPES)
1385
        {
1386
          bool result = structural_comptypes (t1, t2, strict);
1387
 
1388
          if (result && TYPE_CANONICAL (t1) != TYPE_CANONICAL (t2))
1389
            /* The two types are structurally equivalent, but their
1390
               canonical types were different. This is a failure of the
1391
               canonical type propagation code.*/
1392
            internal_error
1393
              ("canonical types differ for identical types %T and %T",
1394
               t1, t2);
1395
          else if (!result && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2))
1396
            /* Two types are structurally different, but the canonical
1397
               types are the same. This means we were over-eager in
1398
               assigning canonical types. */
1399
            internal_error
1400
              ("same canonical type node for different types %T and %T",
1401
               t1, t2);
1402
 
1403
          return result;
1404
        }
1405
#else
1406
      if (USE_CANONICAL_TYPES)
1407
        return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
1408
#endif
1409
      else
1410
        return structural_comptypes (t1, t2, strict);
1411
    }
1412
  else if (strict == COMPARE_STRUCTURAL)
1413
    return structural_comptypes (t1, t2, COMPARE_STRICT);
1414
  else
1415
    return structural_comptypes (t1, t2, strict);
1416
}
1417
 
1418
/* Returns nonzero iff TYPE1 and TYPE2 are the same type, ignoring
1419
   top-level qualifiers.  */
1420
 
1421
bool
1422
same_type_ignoring_top_level_qualifiers_p (tree type1, tree type2)
1423
{
1424
  if (type1 == error_mark_node || type2 == error_mark_node)
1425
    return false;
1426
 
1427
  return same_type_p (TYPE_MAIN_VARIANT (type1), TYPE_MAIN_VARIANT (type2));
1428
}
1429
 
1430
/* Returns 1 if TYPE1 is at least as qualified as TYPE2.  */
1431
 
1432
bool
1433
at_least_as_qualified_p (const_tree type1, const_tree type2)
1434
{
1435
  int q1 = cp_type_quals (type1);
1436
  int q2 = cp_type_quals (type2);
1437
 
1438
  /* All qualifiers for TYPE2 must also appear in TYPE1.  */
1439
  return (q1 & q2) == q2;
1440
}
1441
 
1442
/* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1443
   more cv-qualified that TYPE1, and 0 otherwise.  */
1444
 
1445
int
1446
comp_cv_qualification (const_tree type1, const_tree type2)
1447
{
1448
  int q1 = cp_type_quals (type1);
1449
  int q2 = cp_type_quals (type2);
1450
 
1451
  if (q1 == q2)
1452
    return 0;
1453
 
1454
  if ((q1 & q2) == q2)
1455
    return 1;
1456
  else if ((q1 & q2) == q1)
1457
    return -1;
1458
 
1459
  return 0;
1460
}
1461
 
1462
/* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1463
   subset of the cv-qualification signature of TYPE2, and the types
1464
   are similar.  Returns -1 if the other way 'round, and 0 otherwise.  */
1465
 
1466
int
1467
comp_cv_qual_signature (tree type1, tree type2)
1468
{
1469
  if (comp_ptr_ttypes_real (type2, type1, -1))
1470
    return 1;
1471
  else if (comp_ptr_ttypes_real (type1, type2, -1))
1472
    return -1;
1473
  else
1474
    return 0;
1475
}
1476
 
1477
/* Subroutines of `comptypes'.  */
1478
 
1479
/* Return true if two parameter type lists PARMS1 and PARMS2 are
1480
   equivalent in the sense that functions with those parameter types
1481
   can have equivalent types.  The two lists must be equivalent,
1482
   element by element.  */
1483
 
1484
bool
1485
compparms (const_tree parms1, const_tree parms2)
1486
{
1487
  const_tree t1, t2;
1488
 
1489
  /* An unspecified parmlist matches any specified parmlist
1490
     whose argument types don't need default promotions.  */
1491
 
1492
  for (t1 = parms1, t2 = parms2;
1493
       t1 || t2;
1494
       t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1495
    {
1496
      /* If one parmlist is shorter than the other,
1497
         they fail to match.  */
1498
      if (!t1 || !t2)
1499
        return false;
1500
      if (!same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1501
        return false;
1502
    }
1503
  return true;
1504
}
1505
 
1506
 
1507
/* Process a sizeof or alignof expression where the operand is a
1508
   type.  */
1509
 
1510
tree
1511
cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain)
1512
{
1513
  tree value;
1514
  bool dependent_p;
1515
 
1516
  gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
1517
  if (type == error_mark_node)
1518
    return error_mark_node;
1519
 
1520
  type = non_reference (type);
1521
  if (TREE_CODE (type) == METHOD_TYPE)
1522
    {
1523
      if (complain)
1524
        pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
1525
                 "invalid application of %qs to a member function",
1526
                 operator_name_info[(int) op].name);
1527
      value = size_one_node;
1528
    }
1529
 
1530
  dependent_p = dependent_type_p (type);
1531
  if (!dependent_p)
1532
    complete_type (type);
1533
  if (dependent_p
1534
      /* VLA types will have a non-constant size.  In the body of an
1535
         uninstantiated template, we don't need to try to compute the
1536
         value, because the sizeof expression is not an integral
1537
         constant expression in that case.  And, if we do try to
1538
         compute the value, we'll likely end up with SAVE_EXPRs, which
1539
         the template substitution machinery does not expect to see.  */
1540
      || (processing_template_decl
1541
          && COMPLETE_TYPE_P (type)
1542
          && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST))
1543
    {
1544
      value = build_min (op, size_type_node, type);
1545
      TREE_READONLY (value) = 1;
1546
      return value;
1547
    }
1548
 
1549
  return c_sizeof_or_alignof_type (input_location, complete_type (type),
1550
                                   op == SIZEOF_EXPR,
1551
                                   complain);
1552
}
1553
 
1554
/* Return the size of the type, without producing any warnings for
1555
   types whose size cannot be taken.  This routine should be used only
1556
   in some other routine that has already produced a diagnostic about
1557
   using the size of such a type.  */
1558
tree
1559
cxx_sizeof_nowarn (tree type)
1560
{
1561
  if (TREE_CODE (type) == FUNCTION_TYPE
1562
      || TREE_CODE (type) == VOID_TYPE
1563
      || TREE_CODE (type) == ERROR_MARK)
1564
    return size_one_node;
1565
  else if (!COMPLETE_TYPE_P (type))
1566
    return size_zero_node;
1567
  else
1568
    return cxx_sizeof_or_alignof_type (type, SIZEOF_EXPR, false);
1569
}
1570
 
1571
/* Process a sizeof expression where the operand is an expression.  */
1572
 
1573
static tree
1574
cxx_sizeof_expr (tree e, tsubst_flags_t complain)
1575
{
1576
  if (e == error_mark_node)
1577
    return error_mark_node;
1578
 
1579
  if (processing_template_decl)
1580
    {
1581
      e = build_min (SIZEOF_EXPR, size_type_node, e);
1582
      TREE_SIDE_EFFECTS (e) = 0;
1583
      TREE_READONLY (e) = 1;
1584
 
1585
      return e;
1586
    }
1587
 
1588
  /* To get the size of a static data member declared as an array of
1589
     unknown bound, we need to instantiate it.  */
1590
  if (TREE_CODE (e) == VAR_DECL
1591
      && VAR_HAD_UNKNOWN_BOUND (e)
1592
      && DECL_TEMPLATE_INSTANTIATION (e))
1593
    instantiate_decl (e, /*defer_ok*/true, /*expl_inst_mem*/false);
1594
 
1595
  e = mark_type_use (e);
1596
 
1597
  if (TREE_CODE (e) == COMPONENT_REF
1598
      && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1599
      && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1600
    {
1601
      if (complain & tf_error)
1602
        error ("invalid application of %<sizeof%> to a bit-field");
1603
      else
1604
        return error_mark_node;
1605
      e = char_type_node;
1606
    }
1607
  else if (is_overloaded_fn (e))
1608
    {
1609
      if (complain & tf_error)
1610
        permerror (input_location, "ISO C++ forbids applying %<sizeof%> to an expression of "
1611
                   "function type");
1612
      else
1613
        return error_mark_node;
1614
      e = char_type_node;
1615
    }
1616
  else if (type_unknown_p (e))
1617
    {
1618
      if (complain & tf_error)
1619
        cxx_incomplete_type_error (e, TREE_TYPE (e));
1620
      else
1621
        return error_mark_node;
1622
      e = char_type_node;
1623
    }
1624
  else
1625
    e = TREE_TYPE (e);
1626
 
1627
  return cxx_sizeof_or_alignof_type (e, SIZEOF_EXPR, complain & tf_error);
1628
}
1629
 
1630
/* Implement the __alignof keyword: Return the minimum required
1631
   alignment of E, measured in bytes.  For VAR_DECL's and
1632
   FIELD_DECL's return DECL_ALIGN (which can be set from an
1633
   "aligned" __attribute__ specification).  */
1634
 
1635
static tree
1636
cxx_alignof_expr (tree e, tsubst_flags_t complain)
1637
{
1638
  tree t;
1639
 
1640
  if (e == error_mark_node)
1641
    return error_mark_node;
1642
 
1643
  if (processing_template_decl)
1644
    {
1645
      e = build_min (ALIGNOF_EXPR, size_type_node, e);
1646
      TREE_SIDE_EFFECTS (e) = 0;
1647
      TREE_READONLY (e) = 1;
1648
 
1649
      return e;
1650
    }
1651
 
1652
  e = mark_type_use (e);
1653
 
1654
  if (TREE_CODE (e) == VAR_DECL)
1655
    t = size_int (DECL_ALIGN_UNIT (e));
1656
  else if (TREE_CODE (e) == COMPONENT_REF
1657
           && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1658
           && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1659
    {
1660
      if (complain & tf_error)
1661
        error ("invalid application of %<__alignof%> to a bit-field");
1662
      else
1663
        return error_mark_node;
1664
      t = size_one_node;
1665
    }
1666
  else if (TREE_CODE (e) == COMPONENT_REF
1667
           && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL)
1668
    t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (e, 1)));
1669
  else if (is_overloaded_fn (e))
1670
    {
1671
      if (complain & tf_error)
1672
        permerror (input_location, "ISO C++ forbids applying %<__alignof%> to an expression of "
1673
                   "function type");
1674
      else
1675
        return error_mark_node;
1676
      if (TREE_CODE (e) == FUNCTION_DECL)
1677
        t = size_int (DECL_ALIGN_UNIT (e));
1678
      else
1679
        t = size_one_node;
1680
    }
1681
  else if (type_unknown_p (e))
1682
    {
1683
      if (complain & tf_error)
1684
        cxx_incomplete_type_error (e, TREE_TYPE (e));
1685
      else
1686
        return error_mark_node;
1687
      t = size_one_node;
1688
    }
1689
  else
1690
    return cxx_sizeof_or_alignof_type (TREE_TYPE (e), ALIGNOF_EXPR,
1691
                                       complain & tf_error);
1692
 
1693
  return fold_convert (size_type_node, t);
1694
}
1695
 
1696
/* Process a sizeof or alignof expression E with code OP where the operand
1697
   is an expression.  */
1698
 
1699
tree
1700
cxx_sizeof_or_alignof_expr (tree e, enum tree_code op, bool complain)
1701
{
1702
  if (op == SIZEOF_EXPR)
1703
    return cxx_sizeof_expr (e, complain? tf_warning_or_error : tf_none);
1704
  else
1705
    return cxx_alignof_expr (e, complain? tf_warning_or_error : tf_none);
1706
}
1707
 
1708
/* EXPR is being used in a context that is not a function call.
1709
   Enforce:
1710
 
1711
     [expr.ref]
1712
 
1713
     The expression can be used only as the left-hand operand of a
1714
     member function call.
1715
 
1716
     [expr.mptr.operator]
1717
 
1718
     If the result of .* or ->* is a function, then that result can be
1719
     used only as the operand for the function call operator ().
1720
 
1721
   by issuing an error message if appropriate.  Returns true iff EXPR
1722
   violates these rules.  */
1723
 
1724
bool
1725
invalid_nonstatic_memfn_p (const_tree expr, tsubst_flags_t complain)
1726
{
1727
  if (expr && DECL_NONSTATIC_MEMBER_FUNCTION_P (expr))
1728
    {
1729
      if (complain & tf_error)
1730
        error ("invalid use of non-static member function");
1731
      return true;
1732
    }
1733
  return false;
1734
}
1735
 
1736
/* If EXP is a reference to a bitfield, and the type of EXP does not
1737
   match the declared type of the bitfield, return the declared type
1738
   of the bitfield.  Otherwise, return NULL_TREE.  */
1739
 
1740
tree
1741
is_bitfield_expr_with_lowered_type (const_tree exp)
1742
{
1743
  switch (TREE_CODE (exp))
1744
    {
1745
    case COND_EXPR:
1746
      if (!is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1)
1747
                                               ? TREE_OPERAND (exp, 1)
1748
                                               : TREE_OPERAND (exp, 0)))
1749
        return NULL_TREE;
1750
      return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 2));
1751
 
1752
    case COMPOUND_EXPR:
1753
      return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1));
1754
 
1755
    case MODIFY_EXPR:
1756
    case SAVE_EXPR:
1757
      return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
1758
 
1759
    case COMPONENT_REF:
1760
      {
1761
        tree field;
1762
 
1763
        field = TREE_OPERAND (exp, 1);
1764
        if (TREE_CODE (field) != FIELD_DECL || !DECL_BIT_FIELD_TYPE (field))
1765
          return NULL_TREE;
1766
        if (same_type_ignoring_top_level_qualifiers_p
1767
            (TREE_TYPE (exp), DECL_BIT_FIELD_TYPE (field)))
1768
          return NULL_TREE;
1769
        return DECL_BIT_FIELD_TYPE (field);
1770
      }
1771
 
1772
    CASE_CONVERT:
1773
      if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (exp, 0)))
1774
          == TYPE_MAIN_VARIANT (TREE_TYPE (exp)))
1775
        return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
1776
      /* Fallthrough.  */
1777
 
1778
    default:
1779
      return NULL_TREE;
1780
    }
1781
}
1782
 
1783
/* Like is_bitfield_with_lowered_type, except that if EXP is not a
1784
   bitfield with a lowered type, the type of EXP is returned, rather
1785
   than NULL_TREE.  */
1786
 
1787
tree
1788
unlowered_expr_type (const_tree exp)
1789
{
1790
  tree type;
1791
  tree etype = TREE_TYPE (exp);
1792
 
1793
  type = is_bitfield_expr_with_lowered_type (exp);
1794
  if (type)
1795
    type = cp_build_qualified_type (type, cp_type_quals (etype));
1796
  else
1797
    type = etype;
1798
 
1799
  return type;
1800
}
1801
 
1802
/* Perform the conversions in [expr] that apply when an lvalue appears
1803
   in an rvalue context: the lvalue-to-rvalue, array-to-pointer, and
1804
   function-to-pointer conversions.  In addition, manifest constants
1805
   are replaced by their values, and bitfield references are converted
1806
   to their declared types. Note that this function does not perform the
1807
   lvalue-to-rvalue conversion for class types. If you need that conversion
1808
   to for class types, then you probably need to use force_rvalue.
1809
 
1810
   Although the returned value is being used as an rvalue, this
1811
   function does not wrap the returned expression in a
1812
   NON_LVALUE_EXPR; the caller is expected to be mindful of the fact
1813
   that the return value is no longer an lvalue.  */
1814
 
1815
tree
1816
decay_conversion (tree exp)
1817
{
1818
  tree type;
1819
  enum tree_code code;
1820
 
1821
  type = TREE_TYPE (exp);
1822
  if (type == error_mark_node)
1823
    return error_mark_node;
1824
 
1825
  exp = mark_rvalue_use (exp);
1826
 
1827
  exp = resolve_nondeduced_context (exp);
1828
  if (type_unknown_p (exp))
1829
    {
1830
      cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1831
      return error_mark_node;
1832
    }
1833
 
1834
  /* FIXME remove? at least need to remember that this isn't really a
1835
     constant expression if EXP isn't decl_constant_var_p, like with
1836
     C_MAYBE_CONST_EXPR.  */
1837
  exp = decl_constant_value_safe (exp);
1838
  if (error_operand_p (exp))
1839
    return error_mark_node;
1840
 
1841
  if (NULLPTR_TYPE_P (type))
1842
    return nullptr_node;
1843
 
1844
  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1845
     Leave such NOP_EXPRs, since RHS is being used in non-lvalue context.  */
1846
  code = TREE_CODE (type);
1847
  if (code == VOID_TYPE)
1848
    {
1849
      error ("void value not ignored as it ought to be");
1850
      return error_mark_node;
1851
    }
1852
  if (invalid_nonstatic_memfn_p (exp, tf_warning_or_error))
1853
    return error_mark_node;
1854
  if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1855
    return cp_build_addr_expr (exp, tf_warning_or_error);
1856
  if (code == ARRAY_TYPE)
1857
    {
1858
      tree adr;
1859
      tree ptrtype;
1860
 
1861
      if (TREE_CODE (exp) == INDIRECT_REF)
1862
        return build_nop (build_pointer_type (TREE_TYPE (type)),
1863
                          TREE_OPERAND (exp, 0));
1864
 
1865
      if (TREE_CODE (exp) == COMPOUND_EXPR)
1866
        {
1867
          tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1868
          return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
1869
                         TREE_OPERAND (exp, 0), op1);
1870
        }
1871
 
1872
      if (!lvalue_p (exp)
1873
          && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1874
        {
1875
          error ("invalid use of non-lvalue array");
1876
          return error_mark_node;
1877
        }
1878
 
1879
      ptrtype = build_pointer_type (TREE_TYPE (type));
1880
 
1881
      if (TREE_CODE (exp) == VAR_DECL)
1882
        {
1883
          if (!cxx_mark_addressable (exp))
1884
            return error_mark_node;
1885
          adr = build_nop (ptrtype, build_address (exp));
1886
          return adr;
1887
        }
1888
      /* This way is better for a COMPONENT_REF since it can
1889
         simplify the offset for a component.  */
1890
      adr = cp_build_addr_expr (exp, tf_warning_or_error);
1891
      return cp_convert (ptrtype, adr);
1892
    }
1893
 
1894
  /* If a bitfield is used in a context where integral promotion
1895
     applies, then the caller is expected to have used
1896
     default_conversion.  That function promotes bitfields correctly
1897
     before calling this function.  At this point, if we have a
1898
     bitfield referenced, we may assume that is not subject to
1899
     promotion, and that, therefore, the type of the resulting rvalue
1900
     is the declared type of the bitfield.  */
1901
  exp = convert_bitfield_to_declared_type (exp);
1902
 
1903
  /* We do not call rvalue() here because we do not want to wrap EXP
1904
     in a NON_LVALUE_EXPR.  */
1905
 
1906
  /* [basic.lval]
1907
 
1908
     Non-class rvalues always have cv-unqualified types.  */
1909
  type = TREE_TYPE (exp);
1910
  if (!CLASS_TYPE_P (type) && cv_qualified_p (type))
1911
    exp = build_nop (cv_unqualified (type), exp);
1912
 
1913
  return exp;
1914
}
1915
 
1916
/* Perform preparatory conversions, as part of the "usual arithmetic
1917
   conversions".  In particular, as per [expr]:
1918
 
1919
     Whenever an lvalue expression appears as an operand of an
1920
     operator that expects the rvalue for that operand, the
1921
     lvalue-to-rvalue, array-to-pointer, or function-to-pointer
1922
     standard conversions are applied to convert the expression to an
1923
     rvalue.
1924
 
1925
   In addition, we perform integral promotions here, as those are
1926
   applied to both operands to a binary operator before determining
1927
   what additional conversions should apply.  */
1928
 
1929
tree
1930
default_conversion (tree exp)
1931
{
1932
  /* Check for target-specific promotions.  */
1933
  tree promoted_type = targetm.promoted_type (TREE_TYPE (exp));
1934
  if (promoted_type)
1935
    exp = cp_convert (promoted_type, exp);
1936
  /* Perform the integral promotions first so that bitfield
1937
     expressions (which may promote to "int", even if the bitfield is
1938
     declared "unsigned") are promoted correctly.  */
1939
  else if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
1940
    exp = perform_integral_promotions (exp);
1941
  /* Perform the other conversions.  */
1942
  exp = decay_conversion (exp);
1943
 
1944
  return exp;
1945
}
1946
 
1947
/* EXPR is an expression with an integral or enumeration type.
1948
   Perform the integral promotions in [conv.prom], and return the
1949
   converted value.  */
1950
 
1951
tree
1952
perform_integral_promotions (tree expr)
1953
{
1954
  tree type;
1955
  tree promoted_type;
1956
 
1957
  expr = mark_rvalue_use (expr);
1958
 
1959
  /* [conv.prom]
1960
 
1961
     If the bitfield has an enumerated type, it is treated as any
1962
     other value of that type for promotion purposes.  */
1963
  type = is_bitfield_expr_with_lowered_type (expr);
1964
  if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
1965
    type = TREE_TYPE (expr);
1966
  gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
1967
  /* Scoped enums don't promote.  */
1968
  if (SCOPED_ENUM_P (type))
1969
    return expr;
1970
  promoted_type = type_promotes_to (type);
1971
  if (type != promoted_type)
1972
    expr = cp_convert (promoted_type, expr);
1973
  return expr;
1974
}
1975
 
1976
/* Returns nonzero iff exp is a STRING_CST or the result of applying
1977
   decay_conversion to one.  */
1978
 
1979
int
1980
string_conv_p (const_tree totype, const_tree exp, int warn)
1981
{
1982
  tree t;
1983
 
1984
  if (TREE_CODE (totype) != POINTER_TYPE)
1985
    return 0;
1986
 
1987
  t = TREE_TYPE (totype);
1988
  if (!same_type_p (t, char_type_node)
1989
      && !same_type_p (t, char16_type_node)
1990
      && !same_type_p (t, char32_type_node)
1991
      && !same_type_p (t, wchar_type_node))
1992
    return 0;
1993
 
1994
  if (TREE_CODE (exp) == STRING_CST)
1995
    {
1996
      /* Make sure that we don't try to convert between char and wide chars.  */
1997
      if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
1998
        return 0;
1999
    }
2000
  else
2001
    {
2002
      /* Is this a string constant which has decayed to 'const char *'?  */
2003
      t = build_pointer_type (cp_build_qualified_type (t, TYPE_QUAL_CONST));
2004
      if (!same_type_p (TREE_TYPE (exp), t))
2005
        return 0;
2006
      STRIP_NOPS (exp);
2007
      if (TREE_CODE (exp) != ADDR_EXPR
2008
          || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
2009
        return 0;
2010
    }
2011
 
2012
  /* This warning is not very useful, as it complains about printf.  */
2013
  if (warn)
2014
    warning (OPT_Wwrite_strings,
2015
             "deprecated conversion from string constant to %qT",
2016
             totype);
2017
 
2018
  return 1;
2019
}
2020
 
2021
/* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
2022
   can, for example, use as an lvalue.  This code used to be in
2023
   unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
2024
   expressions, where we're dealing with aggregates.  But now it's again only
2025
   called from unary_complex_lvalue.  The case (in particular) that led to
2026
   this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
2027
   get it there.  */
2028
 
2029
static tree
2030
rationalize_conditional_expr (enum tree_code code, tree t,
2031
                              tsubst_flags_t complain)
2032
{
2033
  /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
2034
     the first operand is always the one to be used if both operands
2035
     are equal, so we know what conditional expression this used to be.  */
2036
  if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
2037
    {
2038
      tree op0 = TREE_OPERAND (t, 0);
2039
      tree op1 = TREE_OPERAND (t, 1);
2040
 
2041
      /* The following code is incorrect if either operand side-effects.  */
2042
      gcc_assert (!TREE_SIDE_EFFECTS (op0)
2043
                  && !TREE_SIDE_EFFECTS (op1));
2044
      return
2045
        build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
2046
                                                    ? LE_EXPR : GE_EXPR),
2047
                                                   op0, TREE_CODE (op0),
2048
                                                   op1, TREE_CODE (op1),
2049
                                                   /*overload=*/NULL,
2050
                                                   complain),
2051
                                cp_build_unary_op (code, op0, 0, complain),
2052
                                cp_build_unary_op (code, op1, 0, complain),
2053
                                complain);
2054
    }
2055
 
2056
  return
2057
    build_conditional_expr (TREE_OPERAND (t, 0),
2058
                            cp_build_unary_op (code, TREE_OPERAND (t, 1), 0,
2059
                                               complain),
2060
                            cp_build_unary_op (code, TREE_OPERAND (t, 2), 0,
2061
                                               complain),
2062
                            complain);
2063
}
2064
 
2065
/* Given the TYPE of an anonymous union field inside T, return the
2066
   FIELD_DECL for the field.  If not found return NULL_TREE.  Because
2067
   anonymous unions can nest, we must also search all anonymous unions
2068
   that are directly reachable.  */
2069
 
2070
tree
2071
lookup_anon_field (tree t, tree type)
2072
{
2073
  tree field;
2074
 
2075
  for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
2076
    {
2077
      if (TREE_STATIC (field))
2078
        continue;
2079
      if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
2080
        continue;
2081
 
2082
      /* If we find it directly, return the field.  */
2083
      if (DECL_NAME (field) == NULL_TREE
2084
          && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
2085
        {
2086
          return field;
2087
        }
2088
 
2089
      /* Otherwise, it could be nested, search harder.  */
2090
      if (DECL_NAME (field) == NULL_TREE
2091
          && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2092
        {
2093
          tree subfield = lookup_anon_field (TREE_TYPE (field), type);
2094
          if (subfield)
2095
            return subfield;
2096
        }
2097
    }
2098
  return NULL_TREE;
2099
}
2100
 
2101
/* Build an expression representing OBJECT.MEMBER.  OBJECT is an
2102
   expression; MEMBER is a DECL or baselink.  If ACCESS_PATH is
2103
   non-NULL, it indicates the path to the base used to name MEMBER.
2104
   If PRESERVE_REFERENCE is true, the expression returned will have
2105
   REFERENCE_TYPE if the MEMBER does.  Otherwise, the expression
2106
   returned will have the type referred to by the reference.
2107
 
2108
   This function does not perform access control; that is either done
2109
   earlier by the parser when the name of MEMBER is resolved to MEMBER
2110
   itself, or later when overload resolution selects one of the
2111
   functions indicated by MEMBER.  */
2112
 
2113
tree
2114
build_class_member_access_expr (tree object, tree member,
2115
                                tree access_path, bool preserve_reference,
2116
                                tsubst_flags_t complain)
2117
{
2118
  tree object_type;
2119
  tree member_scope;
2120
  tree result = NULL_TREE;
2121
  tree using_decl = NULL_TREE;
2122
 
2123
  if (error_operand_p (object) || error_operand_p (member))
2124
    return error_mark_node;
2125
 
2126
  gcc_assert (DECL_P (member) || BASELINK_P (member));
2127
 
2128
  /* [expr.ref]
2129
 
2130
     The type of the first expression shall be "class object" (of a
2131
     complete type).  */
2132
  object_type = TREE_TYPE (object);
2133
  if (!currently_open_class (object_type)
2134
      && !complete_type_or_maybe_complain (object_type, object, complain))
2135
    return error_mark_node;
2136
  if (!CLASS_TYPE_P (object_type))
2137
    {
2138
      if (complain & tf_error)
2139
        {
2140
          if (POINTER_TYPE_P (object_type)
2141
              && CLASS_TYPE_P (TREE_TYPE (object_type)))
2142
            error ("request for member %qD in %qE, which is of pointer "
2143
                   "type %qT (maybe you meant to use %<->%> ?)",
2144
                   member, object, object_type);
2145
          else
2146
            error ("request for member %qD in %qE, which is of non-class "
2147
                   "type %qT", member, object, object_type);
2148
        }
2149
      return error_mark_node;
2150
    }
2151
 
2152
  /* The standard does not seem to actually say that MEMBER must be a
2153
     member of OBJECT_TYPE.  However, that is clearly what is
2154
     intended.  */
2155
  if (DECL_P (member))
2156
    {
2157
      member_scope = DECL_CLASS_CONTEXT (member);
2158
      mark_used (member);
2159
      if (TREE_DEPRECATED (member))
2160
        warn_deprecated_use (member, NULL_TREE);
2161
    }
2162
  else
2163
    member_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (member));
2164
  /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
2165
     presently be the anonymous union.  Go outwards until we find a
2166
     type related to OBJECT_TYPE.  */
2167
  while (ANON_AGGR_TYPE_P (member_scope)
2168
         && !same_type_ignoring_top_level_qualifiers_p (member_scope,
2169
                                                        object_type))
2170
    member_scope = TYPE_CONTEXT (member_scope);
2171
  if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
2172
    {
2173
      if (complain & tf_error)
2174
        {
2175
          if (TREE_CODE (member) == FIELD_DECL)
2176
            error ("invalid use of nonstatic data member %qE", member);
2177
          else
2178
            error ("%qD is not a member of %qT", member, object_type);
2179
        }
2180
      return error_mark_node;
2181
    }
2182
 
2183
  /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into
2184
     `(*(a ?  &b : &c)).x', and so on.  A COND_EXPR is only an lvalue
2185
     in the front end; only _DECLs and _REFs are lvalues in the back end.  */
2186
  {
2187
    tree temp = unary_complex_lvalue (ADDR_EXPR, object);
2188
    if (temp)
2189
      object = cp_build_indirect_ref (temp, RO_NULL, complain);
2190
  }
2191
 
2192
  /* In [expr.ref], there is an explicit list of the valid choices for
2193
     MEMBER.  We check for each of those cases here.  */
2194
  if (TREE_CODE (member) == VAR_DECL)
2195
    {
2196
      /* A static data member.  */
2197
      result = member;
2198
      mark_exp_read (object);
2199
      /* If OBJECT has side-effects, they are supposed to occur.  */
2200
      if (TREE_SIDE_EFFECTS (object))
2201
        result = build2 (COMPOUND_EXPR, TREE_TYPE (result), object, result);
2202
    }
2203
  else if (TREE_CODE (member) == FIELD_DECL)
2204
    {
2205
      /* A non-static data member.  */
2206
      bool null_object_p;
2207
      int type_quals;
2208
      tree member_type;
2209
 
2210
      null_object_p = (TREE_CODE (object) == INDIRECT_REF
2211
                       && integer_zerop (TREE_OPERAND (object, 0)));
2212
 
2213
      /* Convert OBJECT to the type of MEMBER.  */
2214
      if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
2215
                        TYPE_MAIN_VARIANT (member_scope)))
2216
        {
2217
          tree binfo;
2218
          base_kind kind;
2219
 
2220
          binfo = lookup_base (access_path ? access_path : object_type,
2221
                               member_scope, ba_unique,  &kind);
2222
          if (binfo == error_mark_node)
2223
            return error_mark_node;
2224
 
2225
          /* It is invalid to try to get to a virtual base of a
2226
             NULL object.  The most common cause is invalid use of
2227
             offsetof macro.  */
2228
          if (null_object_p && kind == bk_via_virtual)
2229
            {
2230
              if (complain & tf_error)
2231
                {
2232
                  error ("invalid access to non-static data member %qD of "
2233
                         "NULL object",
2234
                         member);
2235
                  error ("(perhaps the %<offsetof%> macro was used incorrectly)");
2236
                }
2237
              return error_mark_node;
2238
            }
2239
 
2240
          /* Convert to the base.  */
2241
          object = build_base_path (PLUS_EXPR, object, binfo,
2242
                                    /*nonnull=*/1, complain);
2243
          /* If we found the base successfully then we should be able
2244
             to convert to it successfully.  */
2245
          gcc_assert (object != error_mark_node);
2246
        }
2247
 
2248
      /* Complain about other invalid uses of offsetof, even though they will
2249
         give the right answer.  Note that we complain whether or not they
2250
         actually used the offsetof macro, since there's no way to know at this
2251
         point.  So we just give a warning, instead of a pedwarn.  */
2252
      /* Do not produce this warning for base class field references, because
2253
         we know for a fact that didn't come from offsetof.  This does occur
2254
         in various testsuite cases where a null object is passed where a
2255
         vtable access is required.  */
2256
      if (null_object_p && warn_invalid_offsetof
2257
          && CLASSTYPE_NON_STD_LAYOUT (object_type)
2258
          && !DECL_FIELD_IS_BASE (member)
2259
          && cp_unevaluated_operand == 0
2260
          && (complain & tf_warning))
2261
        {
2262
          warning (OPT_Winvalid_offsetof,
2263
                   "invalid access to non-static data member %qD "
2264
                   " of NULL object", member);
2265
          warning (OPT_Winvalid_offsetof,
2266
                   "(perhaps the %<offsetof%> macro was used incorrectly)");
2267
        }
2268
 
2269
      /* If MEMBER is from an anonymous aggregate, we have converted
2270
         OBJECT so that it refers to the class containing the
2271
         anonymous union.  Generate a reference to the anonymous union
2272
         itself, and recur to find MEMBER.  */
2273
      if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member))
2274
          /* When this code is called from build_field_call, the
2275
             object already has the type of the anonymous union.
2276
             That is because the COMPONENT_REF was already
2277
             constructed, and was then disassembled before calling
2278
             build_field_call.  After the function-call code is
2279
             cleaned up, this waste can be eliminated.  */
2280
          && (!same_type_ignoring_top_level_qualifiers_p
2281
              (TREE_TYPE (object), DECL_CONTEXT (member))))
2282
        {
2283
          tree anonymous_union;
2284
 
2285
          anonymous_union = lookup_anon_field (TREE_TYPE (object),
2286
                                               DECL_CONTEXT (member));
2287
          object = build_class_member_access_expr (object,
2288
                                                   anonymous_union,
2289
                                                   /*access_path=*/NULL_TREE,
2290
                                                   preserve_reference,
2291
                                                   complain);
2292
        }
2293
 
2294
      /* Compute the type of the field, as described in [expr.ref].  */
2295
      type_quals = TYPE_UNQUALIFIED;
2296
      member_type = TREE_TYPE (member);
2297
      if (TREE_CODE (member_type) != REFERENCE_TYPE)
2298
        {
2299
          type_quals = (cp_type_quals (member_type)
2300
                        | cp_type_quals (object_type));
2301
 
2302
          /* A field is const (volatile) if the enclosing object, or the
2303
             field itself, is const (volatile).  But, a mutable field is
2304
             not const, even within a const object.  */
2305
          if (DECL_MUTABLE_P (member))
2306
            type_quals &= ~TYPE_QUAL_CONST;
2307
          member_type = cp_build_qualified_type (member_type, type_quals);
2308
        }
2309
 
2310
      result = build3 (COMPONENT_REF, member_type, object, member,
2311
                       NULL_TREE);
2312
      result = fold_if_not_in_template (result);
2313
 
2314
      /* Mark the expression const or volatile, as appropriate.  Even
2315
         though we've dealt with the type above, we still have to mark the
2316
         expression itself.  */
2317
      if (type_quals & TYPE_QUAL_CONST)
2318
        TREE_READONLY (result) = 1;
2319
      if (type_quals & TYPE_QUAL_VOLATILE)
2320
        TREE_THIS_VOLATILE (result) = 1;
2321
    }
2322
  else if (BASELINK_P (member))
2323
    {
2324
      /* The member is a (possibly overloaded) member function.  */
2325
      tree functions;
2326
      tree type;
2327
 
2328
      /* If the MEMBER is exactly one static member function, then we
2329
         know the type of the expression.  Otherwise, we must wait
2330
         until overload resolution has been performed.  */
2331
      functions = BASELINK_FUNCTIONS (member);
2332
      if (TREE_CODE (functions) == FUNCTION_DECL
2333
          && DECL_STATIC_FUNCTION_P (functions))
2334
        type = TREE_TYPE (functions);
2335
      else
2336
        type = unknown_type_node;
2337
      /* Note that we do not convert OBJECT to the BASELINK_BINFO
2338
         base.  That will happen when the function is called.  */
2339
      result = build3 (COMPONENT_REF, type, object, member, NULL_TREE);
2340
    }
2341
  else if (TREE_CODE (member) == CONST_DECL)
2342
    {
2343
      /* The member is an enumerator.  */
2344
      result = member;
2345
      /* If OBJECT has side-effects, they are supposed to occur.  */
2346
      if (TREE_SIDE_EFFECTS (object))
2347
        result = build2 (COMPOUND_EXPR, TREE_TYPE (result),
2348
                         object, result);
2349
    }
2350
  else if ((using_decl = strip_using_decl (member)) != member)
2351
    result = build_class_member_access_expr (object,
2352
                                             using_decl,
2353
                                             access_path, preserve_reference,
2354
                                             complain);
2355
  else
2356
    {
2357
      if (complain & tf_error)
2358
        error ("invalid use of %qD", member);
2359
      return error_mark_node;
2360
    }
2361
 
2362
  if (!preserve_reference)
2363
    /* [expr.ref]
2364
 
2365
       If E2 is declared to have type "reference to T", then ... the
2366
       type of E1.E2 is T.  */
2367
    result = convert_from_reference (result);
2368
 
2369
  return result;
2370
}
2371
 
2372
/* Return the destructor denoted by OBJECT.SCOPE::DTOR_NAME, or, if
2373
   SCOPE is NULL, by OBJECT.DTOR_NAME, where DTOR_NAME is ~type.  */
2374
 
2375
static tree
2376
lookup_destructor (tree object, tree scope, tree dtor_name)
2377
{
2378
  tree object_type = TREE_TYPE (object);
2379
  tree dtor_type = TREE_OPERAND (dtor_name, 0);
2380
  tree expr;
2381
 
2382
  if (scope && !check_dtor_name (scope, dtor_type))
2383
    {
2384
      error ("qualified type %qT does not match destructor name ~%qT",
2385
             scope, dtor_type);
2386
      return error_mark_node;
2387
    }
2388
  if (TREE_CODE (dtor_type) == IDENTIFIER_NODE)
2389
    {
2390
      /* In a template, names we can't find a match for are still accepted
2391
         destructor names, and we check them here.  */
2392
      if (check_dtor_name (object_type, dtor_type))
2393
        dtor_type = object_type;
2394
      else
2395
        {
2396
          error ("object type %qT does not match destructor name ~%qT",
2397
                 object_type, dtor_type);
2398
          return error_mark_node;
2399
        }
2400
 
2401
    }
2402
  else if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type)))
2403
    {
2404
      error ("the type being destroyed is %qT, but the destructor refers to %qT",
2405
             TYPE_MAIN_VARIANT (object_type), dtor_type);
2406
      return error_mark_node;
2407
    }
2408
  expr = lookup_member (dtor_type, complete_dtor_identifier,
2409
                        /*protect=*/1, /*want_type=*/false,
2410
                        tf_warning_or_error);
2411
  expr = (adjust_result_of_qualified_name_lookup
2412
          (expr, dtor_type, object_type));
2413
  return expr;
2414
}
2415
 
2416
/* An expression of the form "A::template B" has been resolved to
2417
   DECL.  Issue a diagnostic if B is not a template or template
2418
   specialization.  */
2419
 
2420
void
2421
check_template_keyword (tree decl)
2422
{
2423
  /* The standard says:
2424
 
2425
      [temp.names]
2426
 
2427
      If a name prefixed by the keyword template is not a member
2428
      template, the program is ill-formed.
2429
 
2430
     DR 228 removed the restriction that the template be a member
2431
     template.
2432
 
2433
     DR 96, if accepted would add the further restriction that explicit
2434
     template arguments must be provided if the template keyword is
2435
     used, but, as of 2005-10-16, that DR is still in "drafting".  If
2436
     this DR is accepted, then the semantic checks here can be
2437
     simplified, as the entity named must in fact be a template
2438
     specialization, rather than, as at present, a set of overloaded
2439
     functions containing at least one template function.  */
2440
  if (TREE_CODE (decl) != TEMPLATE_DECL
2441
      && TREE_CODE (decl) != TEMPLATE_ID_EXPR)
2442
    {
2443
      if (!is_overloaded_fn (decl))
2444
        permerror (input_location, "%qD is not a template", decl);
2445
      else
2446
        {
2447
          tree fns;
2448
          fns = decl;
2449
          if (BASELINK_P (fns))
2450
            fns = BASELINK_FUNCTIONS (fns);
2451
          while (fns)
2452
            {
2453
              tree fn = OVL_CURRENT (fns);
2454
              if (TREE_CODE (fn) == TEMPLATE_DECL
2455
                  || TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2456
                break;
2457
              if (TREE_CODE (fn) == FUNCTION_DECL
2458
                  && DECL_USE_TEMPLATE (fn)
2459
                  && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
2460
                break;
2461
              fns = OVL_NEXT (fns);
2462
            }
2463
          if (!fns)
2464
            permerror (input_location, "%qD is not a template", decl);
2465
        }
2466
    }
2467
}
2468
 
2469
/* This function is called by the parser to process a class member
2470
   access expression of the form OBJECT.NAME.  NAME is a node used by
2471
   the parser to represent a name; it is not yet a DECL.  It may,
2472
   however, be a BASELINK where the BASELINK_FUNCTIONS is a
2473
   TEMPLATE_ID_EXPR.  Templates must be looked up by the parser, and
2474
   there is no reason to do the lookup twice, so the parser keeps the
2475
   BASELINK.  TEMPLATE_P is true iff NAME was explicitly declared to
2476
   be a template via the use of the "A::template B" syntax.  */
2477
 
2478
tree
2479
finish_class_member_access_expr (tree object, tree name, bool template_p,
2480
                                 tsubst_flags_t complain)
2481
{
2482
  tree expr;
2483
  tree object_type;
2484
  tree member;
2485
  tree access_path = NULL_TREE;
2486
  tree orig_object = object;
2487
  tree orig_name = name;
2488
 
2489
  if (object == error_mark_node || name == error_mark_node)
2490
    return error_mark_node;
2491
 
2492
  /* If OBJECT is an ObjC class instance, we must obey ObjC access rules.  */
2493
  if (!objc_is_public (object, name))
2494
    return error_mark_node;
2495
 
2496
  object_type = TREE_TYPE (object);
2497
 
2498
  if (processing_template_decl)
2499
    {
2500
      if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME.  */
2501
          dependent_type_p (object_type)
2502
          /* If NAME is just an IDENTIFIER_NODE, then the expression
2503
             is dependent.  */
2504
          || TREE_CODE (object) == IDENTIFIER_NODE
2505
          /* If NAME is "f<args>", where either 'f' or 'args' is
2506
             dependent, then the expression is dependent.  */
2507
          || (TREE_CODE (name) == TEMPLATE_ID_EXPR
2508
              && dependent_template_id_p (TREE_OPERAND (name, 0),
2509
                                          TREE_OPERAND (name, 1)))
2510
          /* If NAME is "T::X" where "T" is dependent, then the
2511
             expression is dependent.  */
2512
          || (TREE_CODE (name) == SCOPE_REF
2513
              && TYPE_P (TREE_OPERAND (name, 0))
2514
              && dependent_type_p (TREE_OPERAND (name, 0))))
2515
        return build_min_nt (COMPONENT_REF, object, name, NULL_TREE);
2516
      object = build_non_dependent_expr (object);
2517
    }
2518
  else if (c_dialect_objc ()
2519
           && TREE_CODE (name) == IDENTIFIER_NODE
2520
           && (expr = objc_maybe_build_component_ref (object, name)))
2521
    return expr;
2522
 
2523
  /* [expr.ref]
2524
 
2525
     The type of the first expression shall be "class object" (of a
2526
     complete type).  */
2527
  if (!currently_open_class (object_type)
2528
      && !complete_type_or_maybe_complain (object_type, object, complain))
2529
    return error_mark_node;
2530
  if (!CLASS_TYPE_P (object_type))
2531
    {
2532
      if (complain & tf_error)
2533
        {
2534
          if (POINTER_TYPE_P (object_type)
2535
              && CLASS_TYPE_P (TREE_TYPE (object_type)))
2536
            error ("request for member %qD in %qE, which is of pointer "
2537
                   "type %qT (maybe you meant to use %<->%> ?)",
2538
                   name, object, object_type);
2539
          else
2540
            error ("request for member %qD in %qE, which is of non-class "
2541
                   "type %qT", name, object, object_type);
2542
        }
2543
      return error_mark_node;
2544
    }
2545
 
2546
  if (BASELINK_P (name))
2547
    /* A member function that has already been looked up.  */
2548
    member = name;
2549
  else
2550
    {
2551
      bool is_template_id = false;
2552
      tree template_args = NULL_TREE;
2553
      tree scope;
2554
 
2555
      if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2556
        {
2557
          is_template_id = true;
2558
          template_args = TREE_OPERAND (name, 1);
2559
          name = TREE_OPERAND (name, 0);
2560
 
2561
          if (TREE_CODE (name) == OVERLOAD)
2562
            name = DECL_NAME (get_first_fn (name));
2563
          else if (DECL_P (name))
2564
            name = DECL_NAME (name);
2565
        }
2566
 
2567
      if (TREE_CODE (name) == SCOPE_REF)
2568
        {
2569
          /* A qualified name.  The qualifying class or namespace `S'
2570
             has already been looked up; it is either a TYPE or a
2571
             NAMESPACE_DECL.  */
2572
          scope = TREE_OPERAND (name, 0);
2573
          name = TREE_OPERAND (name, 1);
2574
 
2575
          /* If SCOPE is a namespace, then the qualified name does not
2576
             name a member of OBJECT_TYPE.  */
2577
          if (TREE_CODE (scope) == NAMESPACE_DECL)
2578
            {
2579
              if (complain & tf_error)
2580
                error ("%<%D::%D%> is not a member of %qT",
2581
                       scope, name, object_type);
2582
              return error_mark_node;
2583
            }
2584
 
2585
          gcc_assert (CLASS_TYPE_P (scope));
2586
          gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE
2587
                      || TREE_CODE (name) == BIT_NOT_EXPR);
2588
 
2589
          if (constructor_name_p (name, scope))
2590
            {
2591
              if (complain & tf_error)
2592
                error ("cannot call constructor %<%T::%D%> directly",
2593
                       scope, name);
2594
              return error_mark_node;
2595
            }
2596
 
2597
          /* Find the base of OBJECT_TYPE corresponding to SCOPE.  */
2598
          access_path = lookup_base (object_type, scope, ba_check, NULL);
2599
          if (access_path == error_mark_node)
2600
            return error_mark_node;
2601
          if (!access_path)
2602
            {
2603
              if (complain & tf_error)
2604
                error ("%qT is not a base of %qT", scope, object_type);
2605
              return error_mark_node;
2606
            }
2607
        }
2608
      else
2609
        {
2610
          scope = NULL_TREE;
2611
          access_path = object_type;
2612
        }
2613
 
2614
      if (TREE_CODE (name) == BIT_NOT_EXPR)
2615
        member = lookup_destructor (object, scope, name);
2616
      else
2617
        {
2618
          /* Look up the member.  */
2619
          member = lookup_member (access_path, name, /*protect=*/1,
2620
                                  /*want_type=*/false, complain);
2621
          if (member == NULL_TREE)
2622
            {
2623
              if (complain & tf_error)
2624
                error ("%qD has no member named %qE",
2625
                       TREE_CODE (access_path) == TREE_BINFO
2626
                       ? TREE_TYPE (access_path) : object_type, name);
2627
              return error_mark_node;
2628
            }
2629
          if (member == error_mark_node)
2630
            return error_mark_node;
2631
        }
2632
 
2633
      if (is_template_id)
2634
        {
2635
          tree templ = member;
2636
 
2637
          if (BASELINK_P (templ))
2638
            templ = lookup_template_function (templ, template_args);
2639
          else
2640
            {
2641
              if (complain & tf_error)
2642
                error ("%qD is not a member template function", name);
2643
              return error_mark_node;
2644
            }
2645
        }
2646
    }
2647
 
2648
  if (TREE_DEPRECATED (member))
2649
    warn_deprecated_use (member, NULL_TREE);
2650
 
2651
  if (template_p)
2652
    check_template_keyword (member);
2653
 
2654
  expr = build_class_member_access_expr (object, member, access_path,
2655
                                         /*preserve_reference=*/false,
2656
                                         complain);
2657
  if (processing_template_decl && expr != error_mark_node)
2658
    {
2659
      if (BASELINK_P (member))
2660
        {
2661
          if (TREE_CODE (orig_name) == SCOPE_REF)
2662
            BASELINK_QUALIFIED_P (member) = 1;
2663
          orig_name = member;
2664
        }
2665
      return build_min_non_dep (COMPONENT_REF, expr,
2666
                                orig_object, orig_name,
2667
                                NULL_TREE);
2668
    }
2669
 
2670
  return expr;
2671
}
2672
 
2673
/* Return an expression for the MEMBER_NAME field in the internal
2674
   representation of PTRMEM, a pointer-to-member function.  (Each
2675
   pointer-to-member function type gets its own RECORD_TYPE so it is
2676
   more convenient to access the fields by name than by FIELD_DECL.)
2677
   This routine converts the NAME to a FIELD_DECL and then creates the
2678
   node for the complete expression.  */
2679
 
2680
tree
2681
build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
2682
{
2683
  tree ptrmem_type;
2684
  tree member;
2685
  tree member_type;
2686
 
2687
  /* This code is a stripped down version of
2688
     build_class_member_access_expr.  It does not work to use that
2689
     routine directly because it expects the object to be of class
2690
     type.  */
2691
  ptrmem_type = TREE_TYPE (ptrmem);
2692
  gcc_assert (TYPE_PTRMEMFUNC_P (ptrmem_type));
2693
  member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2694
                          /*want_type=*/false, tf_warning_or_error);
2695
  member_type = cp_build_qualified_type (TREE_TYPE (member),
2696
                                         cp_type_quals (ptrmem_type));
2697
  return fold_build3_loc (input_location,
2698
                      COMPONENT_REF, member_type,
2699
                      ptrmem, member, NULL_TREE);
2700
}
2701
 
2702
/* Given an expression PTR for a pointer, return an expression
2703
   for the value pointed to.
2704
   ERRORSTRING is the name of the operator to appear in error messages.
2705
 
2706
   This function may need to overload OPERATOR_FNNAME.
2707
   Must also handle REFERENCE_TYPEs for C++.  */
2708
 
2709
tree
2710
build_x_indirect_ref (tree expr, ref_operator errorstring,
2711
                      tsubst_flags_t complain)
2712
{
2713
  tree orig_expr = expr;
2714
  tree rval;
2715
 
2716
  if (processing_template_decl)
2717
    {
2718
      /* Retain the type if we know the operand is a pointer.  */
2719
      if (TREE_TYPE (expr) && POINTER_TYPE_P (TREE_TYPE (expr)))
2720
        return build_min (INDIRECT_REF, TREE_TYPE (TREE_TYPE (expr)), expr);
2721
      if (type_dependent_expression_p (expr))
2722
        return build_min_nt (INDIRECT_REF, expr);
2723
      expr = build_non_dependent_expr (expr);
2724
    }
2725
 
2726
  rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE,
2727
                       NULL_TREE, /*overload=*/NULL, complain);
2728
  if (!rval)
2729
    rval = cp_build_indirect_ref (expr, errorstring, complain);
2730
 
2731
  if (processing_template_decl && rval != error_mark_node)
2732
    return build_min_non_dep (INDIRECT_REF, rval, orig_expr);
2733
  else
2734
    return rval;
2735
}
2736
 
2737
/* Helper function called from c-common.  */
2738
tree
2739
build_indirect_ref (location_t loc ATTRIBUTE_UNUSED,
2740
                    tree ptr, ref_operator errorstring)
2741
{
2742
  return cp_build_indirect_ref (ptr, errorstring, tf_warning_or_error);
2743
}
2744
 
2745
tree
2746
cp_build_indirect_ref (tree ptr, ref_operator errorstring,
2747
                       tsubst_flags_t complain)
2748
{
2749
  tree pointer, type;
2750
 
2751
  if (ptr == error_mark_node)
2752
    return error_mark_node;
2753
 
2754
  if (ptr == current_class_ptr)
2755
    return current_class_ref;
2756
 
2757
  pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2758
             ? ptr : decay_conversion (ptr));
2759
  type = TREE_TYPE (pointer);
2760
 
2761
  if (POINTER_TYPE_P (type))
2762
    {
2763
      /* [expr.unary.op]
2764
 
2765
         If the type of the expression is "pointer to T," the type
2766
         of  the  result  is  "T."  */
2767
      tree t = TREE_TYPE (type);
2768
 
2769
      if (CONVERT_EXPR_P (ptr)
2770
          || TREE_CODE (ptr) == VIEW_CONVERT_EXPR)
2771
        {
2772
          /* If a warning is issued, mark it to avoid duplicates from
2773
             the backend.  This only needs to be done at
2774
             warn_strict_aliasing > 2.  */
2775
          if (warn_strict_aliasing > 2)
2776
            if (strict_aliasing_warning (TREE_TYPE (TREE_OPERAND (ptr, 0)),
2777
                                         type, TREE_OPERAND (ptr, 0)))
2778
              TREE_NO_WARNING (ptr) = 1;
2779
        }
2780
 
2781
      if (VOID_TYPE_P (t))
2782
        {
2783
          /* A pointer to incomplete type (other than cv void) can be
2784
             dereferenced [expr.unary.op]/1  */
2785
          if (complain & tf_error)
2786
            error ("%qT is not a pointer-to-object type", type);
2787
          return error_mark_node;
2788
        }
2789
      else if (TREE_CODE (pointer) == ADDR_EXPR
2790
               && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2791
        /* The POINTER was something like `&x'.  We simplify `*&x' to
2792
           `x'.  */
2793
        return TREE_OPERAND (pointer, 0);
2794
      else
2795
        {
2796
          tree ref = build1 (INDIRECT_REF, t, pointer);
2797
 
2798
          /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2799
             so that we get the proper error message if the result is used
2800
             to assign to.  Also, &* is supposed to be a no-op.  */
2801
          TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2802
          TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2803
          TREE_SIDE_EFFECTS (ref)
2804
            = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2805
          return ref;
2806
        }
2807
    }
2808
  else if (!(complain & tf_error))
2809
    /* Don't emit any errors; we'll just return ERROR_MARK_NODE later.  */
2810
    ;
2811
  /* `pointer' won't be an error_mark_node if we were given a
2812
     pointer to member, so it's cool to check for this here.  */
2813
  else if (TYPE_PTR_TO_MEMBER_P (type))
2814
    switch (errorstring)
2815
      {
2816
         case RO_ARRAY_INDEXING:
2817
           error ("invalid use of array indexing on pointer to member");
2818
           break;
2819
         case RO_UNARY_STAR:
2820
           error ("invalid use of unary %<*%> on pointer to member");
2821
           break;
2822
         case RO_IMPLICIT_CONVERSION:
2823
           error ("invalid use of implicit conversion on pointer to member");
2824
           break;
2825
         default:
2826
           gcc_unreachable ();
2827
      }
2828
  else if (pointer != error_mark_node)
2829
    invalid_indirection_error (input_location, type, errorstring);
2830
 
2831
  return error_mark_node;
2832
}
2833
 
2834
/* This handles expressions of the form "a[i]", which denotes
2835
   an array reference.
2836
 
2837
   This is logically equivalent in C to *(a+i), but we may do it differently.
2838
   If A is a variable or a member, we generate a primitive ARRAY_REF.
2839
   This avoids forcing the array out of registers, and can work on
2840
   arrays that are not lvalues (for example, members of structures returned
2841
   by functions).
2842
 
2843
   If INDEX is of some user-defined type, it must be converted to
2844
   integer type.  Otherwise, to make a compatible PLUS_EXPR, it
2845
   will inherit the type of the array, which will be some pointer type.
2846
 
2847
   LOC is the location to use in building the array reference.  */
2848
 
2849
tree
2850
cp_build_array_ref (location_t loc, tree array, tree idx,
2851
                    tsubst_flags_t complain)
2852
{
2853
  tree ret;
2854
 
2855
  if (idx == 0)
2856
    {
2857
      if (complain & tf_error)
2858
        error_at (loc, "subscript missing in array reference");
2859
      return error_mark_node;
2860
    }
2861
 
2862
  if (TREE_TYPE (array) == error_mark_node
2863
      || TREE_TYPE (idx) == error_mark_node)
2864
    return error_mark_node;
2865
 
2866
  /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2867
     inside it.  */
2868
  switch (TREE_CODE (array))
2869
    {
2870
    case COMPOUND_EXPR:
2871
      {
2872
        tree value = cp_build_array_ref (loc, TREE_OPERAND (array, 1), idx,
2873
                                         complain);
2874
        ret = build2 (COMPOUND_EXPR, TREE_TYPE (value),
2875
                      TREE_OPERAND (array, 0), value);
2876
        SET_EXPR_LOCATION (ret, loc);
2877
        return ret;
2878
      }
2879
 
2880
    case COND_EXPR:
2881
      ret = build_conditional_expr
2882
              (TREE_OPERAND (array, 0),
2883
               cp_build_array_ref (loc, TREE_OPERAND (array, 1), idx,
2884
                                   complain),
2885
               cp_build_array_ref (loc, TREE_OPERAND (array, 2), idx,
2886
                                   complain),
2887
               tf_warning_or_error);
2888
      protected_set_expr_location (ret, loc);
2889
      return ret;
2890
 
2891
    default:
2892
      break;
2893
    }
2894
 
2895
  if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2896
    {
2897
      tree rval, type;
2898
 
2899
      warn_array_subscript_with_type_char (idx);
2900
 
2901
      if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
2902
        {
2903
          if (complain & tf_error)
2904
            error_at (loc, "array subscript is not an integer");
2905
          return error_mark_node;
2906
        }
2907
 
2908
      /* Apply integral promotions *after* noticing character types.
2909
         (It is unclear why we do these promotions -- the standard
2910
         does not say that we should.  In fact, the natural thing would
2911
         seem to be to convert IDX to ptrdiff_t; we're performing
2912
         pointer arithmetic.)  */
2913
      idx = perform_integral_promotions (idx);
2914
 
2915
      /* An array that is indexed by a non-constant
2916
         cannot be stored in a register; we must be able to do
2917
         address arithmetic on its address.
2918
         Likewise an array of elements of variable size.  */
2919
      if (TREE_CODE (idx) != INTEGER_CST
2920
          || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2921
              && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2922
                  != INTEGER_CST)))
2923
        {
2924
          if (!cxx_mark_addressable (array))
2925
            return error_mark_node;
2926
        }
2927
 
2928
      /* An array that is indexed by a constant value which is not within
2929
         the array bounds cannot be stored in a register either; because we
2930
         would get a crash in store_bit_field/extract_bit_field when trying
2931
         to access a non-existent part of the register.  */
2932
      if (TREE_CODE (idx) == INTEGER_CST
2933
          && TYPE_DOMAIN (TREE_TYPE (array))
2934
          && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array))))
2935
        {
2936
          if (!cxx_mark_addressable (array))
2937
            return error_mark_node;
2938
        }
2939
 
2940
      if (!lvalue_p (array) && (complain & tf_error))
2941
        pedwarn (loc, OPT_pedantic,
2942
                 "ISO C++ forbids subscripting non-lvalue array");
2943
 
2944
      /* Note in C++ it is valid to subscript a `register' array, since
2945
         it is valid to take the address of something with that
2946
         storage specification.  */
2947
      if (extra_warnings)
2948
        {
2949
          tree foo = array;
2950
          while (TREE_CODE (foo) == COMPONENT_REF)
2951
            foo = TREE_OPERAND (foo, 0);
2952
          if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo)
2953
              && (complain & tf_warning))
2954
            warning_at (loc, OPT_Wextra,
2955
                        "subscripting array declared %<register%>");
2956
        }
2957
 
2958
      type = TREE_TYPE (TREE_TYPE (array));
2959
      rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE);
2960
      /* Array ref is const/volatile if the array elements are
2961
         or if the array is..  */
2962
      TREE_READONLY (rval)
2963
        |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2964
      TREE_SIDE_EFFECTS (rval)
2965
        |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2966
      TREE_THIS_VOLATILE (rval)
2967
        |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2968
      ret = require_complete_type_sfinae (fold_if_not_in_template (rval),
2969
                                          complain);
2970
      protected_set_expr_location (ret, loc);
2971
      return ret;
2972
    }
2973
 
2974
  {
2975
    tree ar = default_conversion (array);
2976
    tree ind = default_conversion (idx);
2977
 
2978
    /* Put the integer in IND to simplify error checking.  */
2979
    if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2980
      {
2981
        tree temp = ar;
2982
        ar = ind;
2983
        ind = temp;
2984
      }
2985
 
2986
    if (ar == error_mark_node)
2987
      return ar;
2988
 
2989
    if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2990
      {
2991
        if (complain & tf_error)
2992
          error_at (loc, "subscripted value is neither array nor pointer");
2993
        return error_mark_node;
2994
      }
2995
    if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2996
      {
2997
        if (complain & tf_error)
2998
          error_at (loc, "array subscript is not an integer");
2999
        return error_mark_node;
3000
      }
3001
 
3002
    warn_array_subscript_with_type_char (idx);
3003
 
3004
    ret = cp_build_indirect_ref (cp_build_binary_op (input_location,
3005
                                                     PLUS_EXPR, ar, ind,
3006
                                                     complain),
3007
                                 RO_ARRAY_INDEXING,
3008
                                 complain);
3009
    protected_set_expr_location (ret, loc);
3010
    return ret;
3011
  }
3012
}
3013
 
3014
/* Entry point for Obj-C++.  */
3015
 
3016
tree
3017
build_array_ref (location_t loc, tree array, tree idx)
3018
{
3019
  return cp_build_array_ref (loc, array, idx, tf_warning_or_error);
3020
}
3021
 
3022
/* Resolve a pointer to member function.  INSTANCE is the object
3023
   instance to use, if the member points to a virtual member.
3024
 
3025
   This used to avoid checking for virtual functions if basetype
3026
   has no virtual functions, according to an earlier ANSI draft.
3027
   With the final ISO C++ rules, such an optimization is
3028
   incorrect: A pointer to a derived member can be static_cast
3029
   to pointer-to-base-member, as long as the dynamic object
3030
   later has the right member.  */
3031
 
3032
tree
3033
get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
3034
{
3035
  if (TREE_CODE (function) == OFFSET_REF)
3036
    function = TREE_OPERAND (function, 1);
3037
 
3038
  if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
3039
    {
3040
      tree idx, delta, e1, e2, e3, vtbl, basetype;
3041
      tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
3042
 
3043
      tree instance_ptr = *instance_ptrptr;
3044
      tree instance_save_expr = 0;
3045
      if (instance_ptr == error_mark_node)
3046
        {
3047
          if (TREE_CODE (function) == PTRMEM_CST)
3048
            {
3049
              /* Extracting the function address from a pmf is only
3050
                 allowed with -Wno-pmf-conversions. It only works for
3051
                 pmf constants.  */
3052
              e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
3053
              e1 = convert (fntype, e1);
3054
              return e1;
3055
            }
3056
          else
3057
            {
3058
              error ("object missing in use of %qE", function);
3059
              return error_mark_node;
3060
            }
3061
        }
3062
 
3063
      if (TREE_SIDE_EFFECTS (instance_ptr))
3064
        instance_ptr = instance_save_expr = save_expr (instance_ptr);
3065
 
3066
      if (TREE_SIDE_EFFECTS (function))
3067
        function = save_expr (function);
3068
 
3069
      /* Start by extracting all the information from the PMF itself.  */
3070
      e3 = pfn_from_ptrmemfunc (function);
3071
      delta = delta_from_ptrmemfunc (function);
3072
      idx = build1 (NOP_EXPR, vtable_index_type, e3);
3073
      switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
3074
        {
3075
        case ptrmemfunc_vbit_in_pfn:
3076
          e1 = cp_build_binary_op (input_location,
3077
                                   BIT_AND_EXPR, idx, integer_one_node,
3078
                                   tf_warning_or_error);
3079
          idx = cp_build_binary_op (input_location,
3080
                                    MINUS_EXPR, idx, integer_one_node,
3081
                                    tf_warning_or_error);
3082
          break;
3083
 
3084
        case ptrmemfunc_vbit_in_delta:
3085
          e1 = cp_build_binary_op (input_location,
3086
                                   BIT_AND_EXPR, delta, integer_one_node,
3087
                                   tf_warning_or_error);
3088
          delta = cp_build_binary_op (input_location,
3089
                                      RSHIFT_EXPR, delta, integer_one_node,
3090
                                      tf_warning_or_error);
3091
          break;
3092
 
3093
        default:
3094
          gcc_unreachable ();
3095
        }
3096
 
3097
      /* Convert down to the right base before using the instance.  A
3098
         special case is that in a pointer to member of class C, C may
3099
         be incomplete.  In that case, the function will of course be
3100
         a member of C, and no conversion is required.  In fact,
3101
         lookup_base will fail in that case, because incomplete
3102
         classes do not have BINFOs.  */
3103
      basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
3104
      if (!same_type_ignoring_top_level_qualifiers_p
3105
          (basetype, TREE_TYPE (TREE_TYPE (instance_ptr))))
3106
        {
3107
          basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
3108
                                  basetype, ba_check, NULL);
3109
          instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype,
3110
                                          1, tf_warning_or_error);
3111
          if (instance_ptr == error_mark_node)
3112
            return error_mark_node;
3113
        }
3114
      /* ...and then the delta in the PMF.  */
3115
      instance_ptr = fold_build_pointer_plus (instance_ptr, delta);
3116
 
3117
      /* Hand back the adjusted 'this' argument to our caller.  */
3118
      *instance_ptrptr = instance_ptr;
3119
 
3120
      /* Next extract the vtable pointer from the object.  */
3121
      vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
3122
                     instance_ptr);
3123
      vtbl = cp_build_indirect_ref (vtbl, RO_NULL, tf_warning_or_error);
3124
      /* If the object is not dynamic the access invokes undefined
3125
         behavior.  As it is not executed in this case silence the
3126
         spurious warnings it may provoke.  */
3127
      TREE_NO_WARNING (vtbl) = 1;
3128
 
3129
      /* Finally, extract the function pointer from the vtable.  */
3130
      e2 = fold_build_pointer_plus_loc (input_location, vtbl, idx);
3131
      e2 = cp_build_indirect_ref (e2, RO_NULL, tf_warning_or_error);
3132
      TREE_CONSTANT (e2) = 1;
3133
 
3134
      /* When using function descriptors, the address of the
3135
         vtable entry is treated as a function pointer.  */
3136
      if (TARGET_VTABLE_USES_DESCRIPTORS)
3137
        e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
3138
                     cp_build_addr_expr (e2, tf_warning_or_error));
3139
 
3140
      e2 = fold_convert (TREE_TYPE (e3), e2);
3141
      e1 = build_conditional_expr (e1, e2, e3, tf_warning_or_error);
3142
 
3143
      /* Make sure this doesn't get evaluated first inside one of the
3144
         branches of the COND_EXPR.  */
3145
      if (instance_save_expr)
3146
        e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1),
3147
                     instance_save_expr, e1);
3148
 
3149
      function = e1;
3150
    }
3151
  return function;
3152
}
3153
 
3154
/* Used by the C-common bits.  */
3155
tree
3156
build_function_call (location_t loc ATTRIBUTE_UNUSED,
3157
                     tree function, tree params)
3158
{
3159
  return cp_build_function_call (function, params, tf_warning_or_error);
3160
}
3161
 
3162
/* Used by the C-common bits.  */
3163
tree
3164
build_function_call_vec (location_t loc ATTRIBUTE_UNUSED,
3165
                         tree function, VEC(tree,gc) *params,
3166
                         VEC(tree,gc) *origtypes ATTRIBUTE_UNUSED)
3167
{
3168
  VEC(tree,gc) *orig_params = params;
3169
  tree ret = cp_build_function_call_vec (function, &params,
3170
                                         tf_warning_or_error);
3171
 
3172
  /* cp_build_function_call_vec can reallocate PARAMS by adding
3173
     default arguments.  That should never happen here.  Verify
3174
     that.  */
3175
  gcc_assert (params == orig_params);
3176
 
3177
  return ret;
3178
}
3179
 
3180
/* Build a function call using a tree list of arguments.  */
3181
 
3182
tree
3183
cp_build_function_call (tree function, tree params, tsubst_flags_t complain)
3184
{
3185
  VEC(tree,gc) *vec;
3186
  tree ret;
3187
 
3188
  vec = make_tree_vector ();
3189
  for (; params != NULL_TREE; params = TREE_CHAIN (params))
3190
    VEC_safe_push (tree, gc, vec, TREE_VALUE (params));
3191
  ret = cp_build_function_call_vec (function, &vec, complain);
3192
  release_tree_vector (vec);
3193
  return ret;
3194
}
3195
 
3196
/* Build a function call using varargs.  */
3197
 
3198
tree
3199
cp_build_function_call_nary (tree function, tsubst_flags_t complain, ...)
3200
{
3201
  VEC(tree,gc) *vec;
3202
  va_list args;
3203
  tree ret, t;
3204
 
3205
  vec = make_tree_vector ();
3206
  va_start (args, complain);
3207
  for (t = va_arg (args, tree); t != NULL_TREE; t = va_arg (args, tree))
3208
    VEC_safe_push (tree, gc, vec, t);
3209
  va_end (args);
3210
  ret = cp_build_function_call_vec (function, &vec, complain);
3211
  release_tree_vector (vec);
3212
  return ret;
3213
}
3214
 
3215
/* Build a function call using a vector of arguments.  PARAMS may be
3216
   NULL if there are no parameters.  This changes the contents of
3217
   PARAMS.  */
3218
 
3219
tree
3220
cp_build_function_call_vec (tree function, VEC(tree,gc) **params,
3221
                            tsubst_flags_t complain)
3222
{
3223
  tree fntype, fndecl;
3224
  int is_method;
3225
  tree original = function;
3226
  int nargs;
3227
  tree *argarray;
3228
  tree parm_types;
3229
  VEC(tree,gc) *allocated = NULL;
3230
  tree ret;
3231
 
3232
  /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
3233
     expressions, like those used for ObjC messenger dispatches.  */
3234
  if (params != NULL && !VEC_empty (tree, *params))
3235
    function = objc_rewrite_function_call (function,
3236
                                           VEC_index (tree, *params, 0));
3237
 
3238
  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
3239
     Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context.  */
3240
  if (TREE_CODE (function) == NOP_EXPR
3241
      && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
3242
    function = TREE_OPERAND (function, 0);
3243
 
3244
  if (TREE_CODE (function) == FUNCTION_DECL)
3245
    {
3246
      mark_used (function);
3247
      fndecl = function;
3248
 
3249
      /* Convert anything with function type to a pointer-to-function.  */
3250
      if (DECL_MAIN_P (function) && (complain & tf_error))
3251
        pedwarn (input_location, OPT_pedantic,
3252
                 "ISO C++ forbids calling %<::main%> from within program");
3253
 
3254
      function = build_addr_func (function);
3255
    }
3256
  else
3257
    {
3258
      fndecl = NULL_TREE;
3259
 
3260
      function = build_addr_func (function);
3261
    }
3262
 
3263
  if (function == error_mark_node)
3264
    return error_mark_node;
3265
 
3266
  fntype = TREE_TYPE (function);
3267
 
3268
  if (TYPE_PTRMEMFUNC_P (fntype))
3269
    {
3270
      if (complain & tf_error)
3271
        error ("must use %<.*%> or %<->*%> to call pointer-to-member "
3272
               "function in %<%E (...)%>, e.g. %<(... ->* %E) (...)%>",
3273
               original, original);
3274
      return error_mark_node;
3275
    }
3276
 
3277
  is_method = (TREE_CODE (fntype) == POINTER_TYPE
3278
               && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
3279
 
3280
  if (!((TREE_CODE (fntype) == POINTER_TYPE
3281
         && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
3282
        || is_method
3283
        || TREE_CODE (function) == TEMPLATE_ID_EXPR))
3284
    {
3285
      if (complain & tf_error)
3286
        error ("%qE cannot be used as a function", original);
3287
      return error_mark_node;
3288
    }
3289
 
3290
  /* fntype now gets the type of function pointed to.  */
3291
  fntype = TREE_TYPE (fntype);
3292
  parm_types = TYPE_ARG_TYPES (fntype);
3293
 
3294
  if (params == NULL)
3295
    {
3296
      allocated = make_tree_vector ();
3297
      params = &allocated;
3298
    }
3299
 
3300
  nargs = convert_arguments (parm_types, params, fndecl, LOOKUP_NORMAL,
3301
                             complain);
3302
  if (nargs < 0)
3303
    return error_mark_node;
3304
 
3305
  argarray = VEC_address (tree, *params);
3306
 
3307
  /* Check for errors in format strings and inappropriately
3308
     null parameters.  */
3309
  check_function_arguments (fntype, nargs, argarray);
3310
 
3311
  ret = build_cxx_call (function, nargs, argarray);
3312
 
3313
  if (allocated != NULL)
3314
    release_tree_vector (allocated);
3315
 
3316
  return ret;
3317
}
3318
 
3319
/* Subroutine of convert_arguments.
3320
   Warn about wrong number of args are genereted. */
3321
 
3322
static void
3323
warn_args_num (location_t loc, tree fndecl, bool too_many_p)
3324
{
3325
  if (fndecl)
3326
    {
3327
      if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
3328
        {
3329
          if (DECL_NAME (fndecl) == NULL_TREE
3330
              || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
3331
            error_at (loc,
3332
                      too_many_p
3333
                      ? G_("too many arguments to constructor %q#D")
3334
                      : G_("too few arguments to constructor %q#D"),
3335
                      fndecl);
3336
          else
3337
            error_at (loc,
3338
                      too_many_p
3339
                      ? G_("too many arguments to member function %q#D")
3340
                      : G_("too few arguments to member function %q#D"),
3341
                      fndecl);
3342
        }
3343
      else
3344
        error_at (loc,
3345
                  too_many_p
3346
                  ? G_("too many arguments to function %q#D")
3347
                  : G_("too few arguments to function %q#D"),
3348
                  fndecl);
3349
      inform (DECL_SOURCE_LOCATION (fndecl),
3350
              "declared here");
3351
    }
3352
  else
3353
    {
3354
      if (c_dialect_objc ()  &&  objc_message_selector ())
3355
        error_at (loc,
3356
                  too_many_p
3357
                  ? G_("too many arguments to method %q#D")
3358
                  : G_("too few arguments to method %q#D"),
3359
                  objc_message_selector ());
3360
      else
3361
        error_at (loc, too_many_p ? G_("too many arguments to function")
3362
                                  : G_("too few arguments to function"));
3363
    }
3364
}
3365
 
3366
/* Convert the actual parameter expressions in the list VALUES to the
3367
   types in the list TYPELIST.  The converted expressions are stored
3368
   back in the VALUES vector.
3369
   If parmdecls is exhausted, or when an element has NULL as its type,
3370
   perform the default conversions.
3371
 
3372
   NAME is an IDENTIFIER_NODE or 0.  It is used only for error messages.
3373
 
3374
   This is also where warnings about wrong number of args are generated.
3375
 
3376
   Returns the actual number of arguments processed (which might be less
3377
   than the length of the vector), or -1 on error.
3378
 
3379
   In C++, unspecified trailing parameters can be filled in with their
3380
   default arguments, if such were specified.  Do so here.  */
3381
 
3382
static int
3383
convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl,
3384
                   int flags, tsubst_flags_t complain)
3385
{
3386
  tree typetail;
3387
  unsigned int i;
3388
 
3389
  /* Argument passing is always copy-initialization.  */
3390
  flags |= LOOKUP_ONLYCONVERTING;
3391
 
3392
  for (i = 0, typetail = typelist;
3393
       i < VEC_length (tree, *values);
3394
       i++)
3395
    {
3396
      tree type = typetail ? TREE_VALUE (typetail) : 0;
3397
      tree val = VEC_index (tree, *values, i);
3398
 
3399
      if (val == error_mark_node || type == error_mark_node)
3400
        return -1;
3401
 
3402
      if (type == void_type_node)
3403
        {
3404
          if (complain & tf_error)
3405
            {
3406
              warn_args_num (input_location, fndecl, /*too_many_p=*/true);
3407
              return i;
3408
            }
3409
          else
3410
            return -1;
3411
        }
3412
 
3413
      /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
3414
         Strip such NOP_EXPRs, since VAL is used in non-lvalue context.  */
3415
      if (TREE_CODE (val) == NOP_EXPR
3416
          && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
3417
          && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
3418
        val = TREE_OPERAND (val, 0);
3419
 
3420
      if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
3421
        {
3422
          if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
3423
              || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
3424
              || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
3425
            val = decay_conversion (val);
3426
        }
3427
 
3428
      if (val == error_mark_node)
3429
        return -1;
3430
 
3431
      if (type != 0)
3432
        {
3433
          /* Formal parm type is specified by a function prototype.  */
3434
          tree parmval;
3435
 
3436
          if (!COMPLETE_TYPE_P (complete_type (type)))
3437
            {
3438
              if (complain & tf_error)
3439
                {
3440
                  if (fndecl)
3441
                    error ("parameter %P of %qD has incomplete type %qT",
3442
                           i, fndecl, type);
3443
                  else
3444
                    error ("parameter %P has incomplete type %qT", i, type);
3445
                }
3446
              parmval = error_mark_node;
3447
            }
3448
          else
3449
            {
3450
              parmval = convert_for_initialization
3451
                (NULL_TREE, type, val, flags,
3452
                 ICR_ARGPASS, fndecl, i, complain);
3453
              parmval = convert_for_arg_passing (type, parmval);
3454
            }
3455
 
3456
          if (parmval == error_mark_node)
3457
            return -1;
3458
 
3459
          VEC_replace (tree, *values, i, parmval);
3460
        }
3461
      else
3462
        {
3463
          if (fndecl && DECL_BUILT_IN (fndecl)
3464
              && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
3465
            /* Don't do ellipsis conversion for __built_in_constant_p
3466
               as this will result in spurious errors for non-trivial
3467
               types.  */
3468
            val = require_complete_type_sfinae (val, complain);
3469
          else
3470
            val = convert_arg_to_ellipsis (val);
3471
 
3472
          VEC_replace (tree, *values, i, val);
3473
        }
3474
 
3475
      if (typetail)
3476
        typetail = TREE_CHAIN (typetail);
3477
    }
3478
 
3479
  if (typetail != 0 && typetail != void_list_node)
3480
    {
3481
      /* See if there are default arguments that can be used.  Because
3482
         we hold default arguments in the FUNCTION_TYPE (which is so
3483
         wrong), we can see default parameters here from deduced
3484
         contexts (and via typeof) for indirect function calls.
3485
         Fortunately we know whether we have a function decl to
3486
         provide default arguments in a language conformant
3487
         manner.  */
3488
      if (fndecl && TREE_PURPOSE (typetail)
3489
          && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
3490
        {
3491
          for (; typetail != void_list_node; ++i)
3492
            {
3493
              tree parmval
3494
                = convert_default_arg (TREE_VALUE (typetail),
3495
                                       TREE_PURPOSE (typetail),
3496
                                       fndecl, i);
3497
 
3498
              if (parmval == error_mark_node)
3499
                return -1;
3500
 
3501
              VEC_safe_push (tree, gc, *values, parmval);
3502
              typetail = TREE_CHAIN (typetail);
3503
              /* ends with `...'.  */
3504
              if (typetail == NULL_TREE)
3505
                break;
3506
            }
3507
        }
3508
      else
3509
        {
3510
          if (complain & tf_error)
3511
            warn_args_num (input_location, fndecl, /*too_many_p=*/false);
3512
          return -1;
3513
        }
3514
    }
3515
 
3516
  return (int) i;
3517
}
3518
 
3519
/* Build a binary-operation expression, after performing default
3520
   conversions on the operands.  CODE is the kind of expression to
3521
   build.  ARG1 and ARG2 are the arguments.  ARG1_CODE and ARG2_CODE
3522
   are the tree codes which correspond to ARG1 and ARG2 when issuing
3523
   warnings about possibly misplaced parentheses.  They may differ
3524
   from the TREE_CODE of ARG1 and ARG2 if the parser has done constant
3525
   folding (e.g., if the parser sees "a | 1 + 1", it may call this
3526
   routine with ARG2 being an INTEGER_CST and ARG2_CODE == PLUS_EXPR).
3527
   To avoid issuing any parentheses warnings, pass ARG1_CODE and/or
3528
   ARG2_CODE as ERROR_MARK.  */
3529
 
3530
tree
3531
build_x_binary_op (enum tree_code code, tree arg1, enum tree_code arg1_code,
3532
                   tree arg2, enum tree_code arg2_code, tree *overload,
3533
                   tsubst_flags_t complain)
3534
{
3535
  tree orig_arg1;
3536
  tree orig_arg2;
3537
  tree expr;
3538
 
3539
  orig_arg1 = arg1;
3540
  orig_arg2 = arg2;
3541
 
3542
  if (processing_template_decl)
3543
    {
3544
      if (type_dependent_expression_p (arg1)
3545
          || type_dependent_expression_p (arg2))
3546
        return build_min_nt (code, arg1, arg2);
3547
      arg1 = build_non_dependent_expr (arg1);
3548
      arg2 = build_non_dependent_expr (arg2);
3549
    }
3550
 
3551
  if (code == DOTSTAR_EXPR)
3552
    expr = build_m_component_ref (arg1, arg2);
3553
  else
3554
    expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
3555
                         overload, complain);
3556
 
3557
  /* Check for cases such as x+y<<z which users are likely to
3558
     misinterpret.  But don't warn about obj << x + y, since that is a
3559
     common idiom for I/O.  */
3560
  if (warn_parentheses
3561
      && (complain & tf_warning)
3562
      && !processing_template_decl
3563
      && !error_operand_p (arg1)
3564
      && !error_operand_p (arg2)
3565
      && (code != LSHIFT_EXPR
3566
          || !CLASS_TYPE_P (TREE_TYPE (arg1))))
3567
    warn_about_parentheses (code, arg1_code, orig_arg1, arg2_code, orig_arg2);
3568
 
3569
  if (processing_template_decl && expr != error_mark_node)
3570
    return build_min_non_dep (code, expr, orig_arg1, orig_arg2);
3571
 
3572
  return expr;
3573
}
3574
 
3575
/* Build and return an ARRAY_REF expression.  */
3576
 
3577
tree
3578
build_x_array_ref (tree arg1, tree arg2, tsubst_flags_t complain)
3579
{
3580
  tree orig_arg1 = arg1;
3581
  tree orig_arg2 = arg2;
3582
  tree expr;
3583
 
3584
  if (processing_template_decl)
3585
    {
3586
      if (type_dependent_expression_p (arg1)
3587
          || type_dependent_expression_p (arg2))
3588
        return build_min_nt (ARRAY_REF, arg1, arg2,
3589
                             NULL_TREE, NULL_TREE);
3590
      arg1 = build_non_dependent_expr (arg1);
3591
      arg2 = build_non_dependent_expr (arg2);
3592
    }
3593
 
3594
  expr = build_new_op (ARRAY_REF, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
3595
                       /*overload=*/NULL, complain);
3596
 
3597
  if (processing_template_decl && expr != error_mark_node)
3598
    return build_min_non_dep (ARRAY_REF, expr, orig_arg1, orig_arg2,
3599
                              NULL_TREE, NULL_TREE);
3600
  return expr;
3601
}
3602
 
3603
/* Return whether OP is an expression of enum type cast to integer
3604
   type.  In C++ even unsigned enum types are cast to signed integer
3605
   types.  We do not want to issue warnings about comparisons between
3606
   signed and unsigned types when one of the types is an enum type.
3607
   Those warnings are always false positives in practice.  */
3608
 
3609
static bool
3610
enum_cast_to_int (tree op)
3611
{
3612
  if (TREE_CODE (op) == NOP_EXPR
3613
      && TREE_TYPE (op) == integer_type_node
3614
      && TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == ENUMERAL_TYPE
3615
      && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 0))))
3616
    return true;
3617
 
3618
  /* The cast may have been pushed into a COND_EXPR.  */
3619
  if (TREE_CODE (op) == COND_EXPR)
3620
    return (enum_cast_to_int (TREE_OPERAND (op, 1))
3621
            || enum_cast_to_int (TREE_OPERAND (op, 2)));
3622
 
3623
  return false;
3624
}
3625
 
3626
/* For the c-common bits.  */
3627
tree
3628
build_binary_op (location_t location, enum tree_code code, tree op0, tree op1,
3629
                 int convert_p ATTRIBUTE_UNUSED)
3630
{
3631
  return cp_build_binary_op (location, code, op0, op1, tf_warning_or_error);
3632
}
3633
 
3634
 
3635
/* Build a binary-operation expression without default conversions.
3636
   CODE is the kind of expression to build.
3637
   LOCATION is the location_t of the operator in the source code.
3638
   This function differs from `build' in several ways:
3639
   the data type of the result is computed and recorded in it,
3640
   warnings are generated if arg data types are invalid,
3641
   special handling for addition and subtraction of pointers is known,
3642
   and some optimization is done (operations on narrow ints
3643
   are done in the narrower type when that gives the same result).
3644
   Constant folding is also done before the result is returned.
3645
 
3646
   Note that the operands will never have enumeral types
3647
   because either they have just had the default conversions performed
3648
   or they have both just been converted to some other type in which
3649
   the arithmetic is to be done.
3650
 
3651
   C++: must do special pointer arithmetic when implementing
3652
   multiple inheritance, and deal with pointer to member functions.  */
3653
 
3654
tree
3655
cp_build_binary_op (location_t location,
3656
                    enum tree_code code, tree orig_op0, tree orig_op1,
3657
                    tsubst_flags_t complain)
3658
{
3659
  tree op0, op1;
3660
  enum tree_code code0, code1;
3661
  tree type0, type1;
3662
  const char *invalid_op_diag;
3663
 
3664
  /* Expression code to give to the expression when it is built.
3665
     Normally this is CODE, which is what the caller asked for,
3666
     but in some special cases we change it.  */
3667
  enum tree_code resultcode = code;
3668
 
3669
  /* Data type in which the computation is to be performed.
3670
     In the simplest cases this is the common type of the arguments.  */
3671
  tree result_type = NULL;
3672
 
3673
  /* Nonzero means operands have already been type-converted
3674
     in whatever way is necessary.
3675
     Zero means they need to be converted to RESULT_TYPE.  */
3676
  int converted = 0;
3677
 
3678
  /* Nonzero means create the expression with this type, rather than
3679
     RESULT_TYPE.  */
3680
  tree build_type = 0;
3681
 
3682
  /* Nonzero means after finally constructing the expression
3683
     convert it to this type.  */
3684
  tree final_type = 0;
3685
 
3686
  tree result;
3687
 
3688
  /* Nonzero if this is an operation like MIN or MAX which can
3689
     safely be computed in short if both args are promoted shorts.
3690
     Also implies COMMON.
3691
     -1 indicates a bitwise operation; this makes a difference
3692
     in the exact conditions for when it is safe to do the operation
3693
     in a narrower mode.  */
3694
  int shorten = 0;
3695
 
3696
  /* Nonzero if this is a comparison operation;
3697
     if both args are promoted shorts, compare the original shorts.
3698
     Also implies COMMON.  */
3699
  int short_compare = 0;
3700
 
3701
  /* Nonzero means set RESULT_TYPE to the common type of the args.  */
3702
  int common = 0;
3703
 
3704
  /* True if both operands have arithmetic type.  */
3705
  bool arithmetic_types_p;
3706
 
3707
  /* Apply default conversions.  */
3708
  op0 = orig_op0;
3709
  op1 = orig_op1;
3710
 
3711
  if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
3712
      || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
3713
      || code == TRUTH_XOR_EXPR)
3714
    {
3715
      if (!really_overloaded_fn (op0) && !VOID_TYPE_P (TREE_TYPE (op0)))
3716
        op0 = decay_conversion (op0);
3717
      if (!really_overloaded_fn (op1) && !VOID_TYPE_P (TREE_TYPE (op1)))
3718
        op1 = decay_conversion (op1);
3719
    }
3720
  else
3721
    {
3722
      if (!really_overloaded_fn (op0) && !VOID_TYPE_P (TREE_TYPE (op0)))
3723
        op0 = default_conversion (op0);
3724
      if (!really_overloaded_fn (op1) && !VOID_TYPE_P (TREE_TYPE (op1)))
3725
        op1 = default_conversion (op1);
3726
    }
3727
 
3728
  /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue.  */
3729
  STRIP_TYPE_NOPS (op0);
3730
  STRIP_TYPE_NOPS (op1);
3731
 
3732
  /* DTRT if one side is an overloaded function, but complain about it.  */
3733
  if (type_unknown_p (op0))
3734
    {
3735
      tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
3736
      if (t != error_mark_node)
3737
        {
3738
          if (complain & tf_error)
3739
            permerror (input_location, "assuming cast to type %qT from overloaded function",
3740
                       TREE_TYPE (t));
3741
          op0 = t;
3742
        }
3743
    }
3744
  if (type_unknown_p (op1))
3745
    {
3746
      tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
3747
      if (t != error_mark_node)
3748
        {
3749
          if (complain & tf_error)
3750
            permerror (input_location, "assuming cast to type %qT from overloaded function",
3751
                       TREE_TYPE (t));
3752
          op1 = t;
3753
        }
3754
    }
3755
 
3756
  type0 = TREE_TYPE (op0);
3757
  type1 = TREE_TYPE (op1);
3758
 
3759
  /* The expression codes of the data types of the arguments tell us
3760
     whether the arguments are integers, floating, pointers, etc.  */
3761
  code0 = TREE_CODE (type0);
3762
  code1 = TREE_CODE (type1);
3763
 
3764
  /* If an error was already reported for one of the arguments,
3765
     avoid reporting another error.  */
3766
  if (code0 == ERROR_MARK || code1 == ERROR_MARK)
3767
    return error_mark_node;
3768
 
3769
  if ((invalid_op_diag
3770
       = targetm.invalid_binary_op (code, type0, type1)))
3771
    {
3772
      error (invalid_op_diag);
3773
      return error_mark_node;
3774
    }
3775
 
3776
  /* Issue warnings about peculiar, but valid, uses of NULL.  */
3777
  if ((orig_op0 == null_node || orig_op1 == null_node)
3778
      /* It's reasonable to use pointer values as operands of &&
3779
         and ||, so NULL is no exception.  */
3780
      && code != TRUTH_ANDIF_EXPR && code != TRUTH_ORIF_EXPR
3781
      && ( /* Both are NULL (or 0) and the operation was not a
3782
              comparison or a pointer subtraction.  */
3783
          (null_ptr_cst_p (orig_op0) && null_ptr_cst_p (orig_op1)
3784
           && code != EQ_EXPR && code != NE_EXPR && code != MINUS_EXPR)
3785
          /* Or if one of OP0 or OP1 is neither a pointer nor NULL.  */
3786
          || (!null_ptr_cst_p (orig_op0)
3787
              && !TYPE_PTR_P (type0) && !TYPE_PTR_TO_MEMBER_P (type0))
3788
          || (!null_ptr_cst_p (orig_op1)
3789
              && !TYPE_PTR_P (type1) && !TYPE_PTR_TO_MEMBER_P (type1)))
3790
      && (complain & tf_warning))
3791
    /* Some sort of arithmetic operation involving NULL was
3792
       performed.  */
3793
    warning (OPT_Wpointer_arith, "NULL used in arithmetic");
3794
 
3795
  switch (code)
3796
    {
3797
    case MINUS_EXPR:
3798
      /* Subtraction of two similar pointers.
3799
         We must subtract them as integers, then divide by object size.  */
3800
      if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
3801
          && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
3802
                                                        TREE_TYPE (type1)))
3803
        return pointer_diff (op0, op1, common_pointer_type (type0, type1));
3804
      /* In all other cases except pointer - int, the usual arithmetic
3805
         rules apply.  */
3806
      else if (!(code0 == POINTER_TYPE && code1 == INTEGER_TYPE))
3807
        {
3808
          common = 1;
3809
          break;
3810
        }
3811
      /* The pointer - int case is just like pointer + int; fall
3812
         through.  */
3813
    case PLUS_EXPR:
3814
      if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE)
3815
          && (code0 == INTEGER_TYPE || code1 == INTEGER_TYPE))
3816
        {
3817
          tree ptr_operand;
3818
          tree int_operand;
3819
          ptr_operand = ((code0 == POINTER_TYPE) ? op0 : op1);
3820
          int_operand = ((code0 == INTEGER_TYPE) ? op0 : op1);
3821
          if (processing_template_decl)
3822
            {
3823
              result_type = TREE_TYPE (ptr_operand);
3824
              break;
3825
            }
3826
          return cp_pointer_int_sum (code,
3827
                                     ptr_operand,
3828
                                     int_operand);
3829
        }
3830
      common = 1;
3831
      break;
3832
 
3833
    case MULT_EXPR:
3834
      common = 1;
3835
      break;
3836
 
3837
    case TRUNC_DIV_EXPR:
3838
    case CEIL_DIV_EXPR:
3839
    case FLOOR_DIV_EXPR:
3840
    case ROUND_DIV_EXPR:
3841
    case EXACT_DIV_EXPR:
3842
      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3843
           || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
3844
          && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3845
              || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
3846
        {
3847
          enum tree_code tcode0 = code0, tcode1 = code1;
3848
 
3849
          warn_for_div_by_zero (location, op1);
3850
 
3851
          if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE)
3852
            tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
3853
          if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE)
3854
            tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
3855
 
3856
          if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
3857
            resultcode = RDIV_EXPR;
3858
          else
3859
            /* When dividing two signed integers, we have to promote to int.
3860
               unless we divide by a constant != -1.  Note that default
3861
               conversion will have been performed on the operands at this
3862
               point, so we have to dig out the original type to find out if
3863
               it was unsigned.  */
3864
            shorten = ((TREE_CODE (op0) == NOP_EXPR
3865
                        && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3866
                       || (TREE_CODE (op1) == INTEGER_CST
3867
                           && ! integer_all_onesp (op1)));
3868
 
3869
          common = 1;
3870
        }
3871
      break;
3872
 
3873
    case BIT_AND_EXPR:
3874
    case BIT_IOR_EXPR:
3875
    case BIT_XOR_EXPR:
3876
      if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3877
          || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
3878
              && !VECTOR_FLOAT_TYPE_P (type0)
3879
              && !VECTOR_FLOAT_TYPE_P (type1)))
3880
        shorten = -1;
3881
      break;
3882
 
3883
    case TRUNC_MOD_EXPR:
3884
    case FLOOR_MOD_EXPR:
3885
      warn_for_div_by_zero (location, op1);
3886
 
3887
      if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
3888
          && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
3889
          && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
3890
        common = 1;
3891
      else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3892
        {
3893
          /* Although it would be tempting to shorten always here, that loses
3894
             on some targets, since the modulo instruction is undefined if the
3895
             quotient can't be represented in the computation mode.  We shorten
3896
             only if unsigned or if dividing by something we know != -1.  */
3897
          shorten = ((TREE_CODE (op0) == NOP_EXPR
3898
                      && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3899
                     || (TREE_CODE (op1) == INTEGER_CST
3900
                         && ! integer_all_onesp (op1)));
3901
          common = 1;
3902
        }
3903
      break;
3904
 
3905
    case TRUTH_ANDIF_EXPR:
3906
    case TRUTH_ORIF_EXPR:
3907
    case TRUTH_AND_EXPR:
3908
    case TRUTH_OR_EXPR:
3909
      result_type = boolean_type_node;
3910
      break;
3911
 
3912
      /* Shift operations: result has same type as first operand;
3913
         always convert second operand to int.
3914
         Also set SHORT_SHIFT if shifting rightward.  */
3915
 
3916
    case RSHIFT_EXPR:
3917
      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3918
        {
3919
          result_type = type0;
3920
          if (TREE_CODE (op1) == INTEGER_CST)
3921
            {
3922
              if (tree_int_cst_lt (op1, integer_zero_node))
3923
                {
3924
                  if ((complain & tf_warning)
3925
                      && c_inhibit_evaluation_warnings == 0)
3926
                    warning (0, "right shift count is negative");
3927
                }
3928
              else
3929
                {
3930
                  if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0
3931
                      && (complain & tf_warning)
3932
                      && c_inhibit_evaluation_warnings == 0)
3933
                    warning (0, "right shift count >= width of type");
3934
                }
3935
            }
3936
          /* Convert the shift-count to an integer, regardless of
3937
             size of value being shifted.  */
3938
          if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3939
            op1 = cp_convert (integer_type_node, op1);
3940
          /* Avoid converting op1 to result_type later.  */
3941
          converted = 1;
3942
        }
3943
      break;
3944
 
3945
    case LSHIFT_EXPR:
3946
      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3947
        {
3948
          result_type = type0;
3949
          if (TREE_CODE (op1) == INTEGER_CST)
3950
            {
3951
              if (tree_int_cst_lt (op1, integer_zero_node))
3952
                {
3953
                  if ((complain & tf_warning)
3954
                      && c_inhibit_evaluation_warnings == 0)
3955
                    warning (0, "left shift count is negative");
3956
                }
3957
              else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3958
                {
3959
                  if ((complain & tf_warning)
3960
                      && c_inhibit_evaluation_warnings == 0)
3961
                    warning (0, "left shift count >= width of type");
3962
                }
3963
            }
3964
          /* Convert the shift-count to an integer, regardless of
3965
             size of value being shifted.  */
3966
          if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3967
            op1 = cp_convert (integer_type_node, op1);
3968
          /* Avoid converting op1 to result_type later.  */
3969
          converted = 1;
3970
        }
3971
      break;
3972
 
3973
    case RROTATE_EXPR:
3974
    case LROTATE_EXPR:
3975
      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3976
        {
3977
          result_type = type0;
3978
          if (TREE_CODE (op1) == INTEGER_CST)
3979
            {
3980
              if (tree_int_cst_lt (op1, integer_zero_node))
3981
                {
3982
                  if (complain & tf_warning)
3983
                    warning (0, (code == LROTATE_EXPR)
3984
                                  ? G_("left rotate count is negative")
3985
                                  : G_("right rotate count is negative"));
3986
                }
3987
              else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3988
                {
3989
                  if (complain & tf_warning)
3990
                    warning (0, (code == LROTATE_EXPR)
3991
                                  ? G_("left rotate count >= width of type")
3992
                                  : G_("right rotate count >= width of type"));
3993
                }
3994
            }
3995
          /* Convert the shift-count to an integer, regardless of
3996
             size of value being shifted.  */
3997
          if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3998
            op1 = cp_convert (integer_type_node, op1);
3999
        }
4000
      break;
4001
 
4002
    case EQ_EXPR:
4003
    case NE_EXPR:
4004
      if ((complain & tf_warning)
4005
          && (FLOAT_TYPE_P (type0) || FLOAT_TYPE_P (type1)))
4006
        warning (OPT_Wfloat_equal,
4007
                 "comparing floating point with == or != is unsafe");
4008
      if ((complain & tf_warning)
4009
          && ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1))
4010
              || (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0))))
4011
        warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
4012
 
4013
      build_type = boolean_type_node;
4014
      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
4015
           || code0 == COMPLEX_TYPE || code0 == ENUMERAL_TYPE)
4016
          && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
4017
              || code1 == COMPLEX_TYPE || code1 == ENUMERAL_TYPE))
4018
        short_compare = 1;
4019
      else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
4020
               || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
4021
        result_type = composite_pointer_type (type0, type1, op0, op1,
4022
                                              CPO_COMPARISON, complain);
4023
      else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0))
4024
               && null_ptr_cst_p (op1))
4025
        {
4026
          if (TREE_CODE (op0) == ADDR_EXPR
4027
              && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
4028
            {
4029
              if (complain & tf_warning)
4030
                warning (OPT_Waddress, "the address of %qD will never be NULL",
4031
                         TREE_OPERAND (op0, 0));
4032
            }
4033
          result_type = type0;
4034
        }
4035
      else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1))
4036
               && null_ptr_cst_p (op0))
4037
        {
4038
          if (TREE_CODE (op1) == ADDR_EXPR
4039
              && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
4040
            {
4041
              if (complain & tf_warning)
4042
                warning (OPT_Waddress, "the address of %qD will never be NULL",
4043
                         TREE_OPERAND (op1, 0));
4044
            }
4045
          result_type = type1;
4046
        }
4047
      else if (null_ptr_cst_p (op0) && null_ptr_cst_p (op1))
4048
        /* One of the operands must be of nullptr_t type.  */
4049
        result_type = TREE_TYPE (nullptr_node);
4050
      else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
4051
        {
4052
          result_type = type0;
4053
          if (complain & tf_error)
4054
            permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4055
          else
4056
            return error_mark_node;
4057
        }
4058
      else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
4059
        {
4060
          result_type = type1;
4061
          if (complain & tf_error)
4062
            permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4063
          else
4064
            return error_mark_node;
4065
        }
4066
      else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
4067
        {
4068
          if (TARGET_PTRMEMFUNC_VBIT_LOCATION
4069
              == ptrmemfunc_vbit_in_delta)
4070
            {
4071
              tree pfn0 = pfn_from_ptrmemfunc (op0);
4072
              tree delta0 = delta_from_ptrmemfunc (op0);
4073
              tree e1 = cp_build_binary_op (location,
4074
                                            EQ_EXPR,
4075
                                            pfn0,
4076
                                            build_zero_cst (TREE_TYPE (pfn0)),
4077
                                            complain);
4078
              tree e2 = cp_build_binary_op (location,
4079
                                            BIT_AND_EXPR,
4080
                                            delta0,
4081
                                            integer_one_node,
4082
                                            complain);
4083
 
4084
              if ((complain & tf_warning)
4085
                  && c_inhibit_evaluation_warnings == 0
4086
                  && !NULLPTR_TYPE_P (TREE_TYPE (op1)))
4087
                warning (OPT_Wzero_as_null_pointer_constant,
4088
                         "zero as null pointer constant");
4089
 
4090
              e2 = cp_build_binary_op (location,
4091
                                       EQ_EXPR, e2, integer_zero_node,
4092
                                       complain);
4093
              op0 = cp_build_binary_op (location,
4094
                                        TRUTH_ANDIF_EXPR, e1, e2,
4095
                                        complain);
4096
              op1 = cp_convert (TREE_TYPE (op0), integer_one_node);
4097
            }
4098
          else
4099
            {
4100
              op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
4101
              op1 = cp_convert (TREE_TYPE (op0), op1);
4102
            }
4103
          result_type = TREE_TYPE (op0);
4104
        }
4105
      else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
4106
        return cp_build_binary_op (location, code, op1, op0, complain);
4107
      else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1))
4108
        {
4109
          tree type;
4110
          /* E will be the final comparison.  */
4111
          tree e;
4112
          /* E1 and E2 are for scratch.  */
4113
          tree e1;
4114
          tree e2;
4115
          tree pfn0;
4116
          tree pfn1;
4117
          tree delta0;
4118
          tree delta1;
4119
 
4120
          type = composite_pointer_type (type0, type1, op0, op1,
4121
                                         CPO_COMPARISON, complain);
4122
 
4123
          if (!same_type_p (TREE_TYPE (op0), type))
4124
            op0 = cp_convert_and_check (type, op0);
4125
          if (!same_type_p (TREE_TYPE (op1), type))
4126
            op1 = cp_convert_and_check (type, op1);
4127
 
4128
          if (op0 == error_mark_node || op1 == error_mark_node)
4129
            return error_mark_node;
4130
 
4131
          if (TREE_SIDE_EFFECTS (op0))
4132
            op0 = save_expr (op0);
4133
          if (TREE_SIDE_EFFECTS (op1))
4134
            op1 = save_expr (op1);
4135
 
4136
          pfn0 = pfn_from_ptrmemfunc (op0);
4137
          pfn1 = pfn_from_ptrmemfunc (op1);
4138
          delta0 = delta_from_ptrmemfunc (op0);
4139
          delta1 = delta_from_ptrmemfunc (op1);
4140
          if (TARGET_PTRMEMFUNC_VBIT_LOCATION
4141
              == ptrmemfunc_vbit_in_delta)
4142
            {
4143
              /* We generate:
4144
 
4145
                 (op0.pfn == op1.pfn
4146
                  && ((op0.delta == op1.delta)
4147
                       || (!op0.pfn && op0.delta & 1 == 0
4148
                           && op1.delta & 1 == 0))
4149
 
4150
                 The reason for the `!op0.pfn' bit is that a NULL
4151
                 pointer-to-member is any member with a zero PFN and
4152
                 LSB of the DELTA field is 0.  */
4153
 
4154
              e1 = cp_build_binary_op (location, BIT_AND_EXPR,
4155
                                       delta0,
4156
                                       integer_one_node,
4157
                                       complain);
4158
              e1 = cp_build_binary_op (location,
4159
                                       EQ_EXPR, e1, integer_zero_node,
4160
                                       complain);
4161
              e2 = cp_build_binary_op (location, BIT_AND_EXPR,
4162
                                       delta1,
4163
                                       integer_one_node,
4164
                                       complain);
4165
              e2 = cp_build_binary_op (location,
4166
                                       EQ_EXPR, e2, integer_zero_node,
4167
                                       complain);
4168
              e1 = cp_build_binary_op (location,
4169
                                       TRUTH_ANDIF_EXPR, e2, e1,
4170
                                       complain);
4171
              e2 = cp_build_binary_op (location, EQ_EXPR,
4172
                                       pfn0,
4173
                                       build_zero_cst (TREE_TYPE (pfn0)),
4174
                                       complain);
4175
              e2 = cp_build_binary_op (location,
4176
                                       TRUTH_ANDIF_EXPR, e2, e1, complain);
4177
              e1 = cp_build_binary_op (location,
4178
                                       EQ_EXPR, delta0, delta1, complain);
4179
              e1 = cp_build_binary_op (location,
4180
                                       TRUTH_ORIF_EXPR, e1, e2, complain);
4181
            }
4182
          else
4183
            {
4184
              /* We generate:
4185
 
4186
                 (op0.pfn == op1.pfn
4187
                 && (!op0.pfn || op0.delta == op1.delta))
4188
 
4189
                 The reason for the `!op0.pfn' bit is that a NULL
4190
                 pointer-to-member is any member with a zero PFN; the
4191
                 DELTA field is unspecified.  */
4192
 
4193
              e1 = cp_build_binary_op (location,
4194
                                       EQ_EXPR, delta0, delta1, complain);
4195
              e2 = cp_build_binary_op (location,
4196
                                       EQ_EXPR,
4197
                                       pfn0,
4198
                                       build_zero_cst (TREE_TYPE (pfn0)),
4199
                                       complain);
4200
              e1 = cp_build_binary_op (location,
4201
                                       TRUTH_ORIF_EXPR, e1, e2, complain);
4202
            }
4203
          e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
4204
          e = cp_build_binary_op (location,
4205
                                  TRUTH_ANDIF_EXPR, e2, e1, complain);
4206
          if (code == EQ_EXPR)
4207
            return e;
4208
          return cp_build_binary_op (location,
4209
                                     EQ_EXPR, e, integer_zero_node, complain);
4210
        }
4211
      else
4212
        {
4213
          gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
4214
                      || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
4215
                                       type1));
4216
          gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
4217
                      || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
4218
                                       type0));
4219
        }
4220
 
4221
      break;
4222
 
4223
    case MAX_EXPR:
4224
    case MIN_EXPR:
4225
      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
4226
           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
4227
        shorten = 1;
4228
      else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
4229
        result_type = composite_pointer_type (type0, type1, op0, op1,
4230
                                              CPO_COMPARISON, complain);
4231
      break;
4232
 
4233
    case LE_EXPR:
4234
    case GE_EXPR:
4235
    case LT_EXPR:
4236
    case GT_EXPR:
4237
      if (TREE_CODE (orig_op0) == STRING_CST
4238
          || TREE_CODE (orig_op1) == STRING_CST)
4239
        {
4240
          if (complain & tf_warning)
4241
            warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour");
4242
        }
4243
 
4244
      build_type = boolean_type_node;
4245
      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
4246
           || code0 == ENUMERAL_TYPE)
4247
           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
4248
               || code1 == ENUMERAL_TYPE))
4249
        short_compare = 1;
4250
      else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
4251
        result_type = composite_pointer_type (type0, type1, op0, op1,
4252
                                              CPO_COMPARISON, complain);
4253
      else if (code0 == POINTER_TYPE && null_ptr_cst_p (op1))
4254
        {
4255
          result_type = type0;
4256
          if (extra_warnings && (complain & tf_warning))
4257
            warning (OPT_Wextra,
4258
                     "ordered comparison of pointer with integer zero");
4259
        }
4260
      else if (code1 == POINTER_TYPE && null_ptr_cst_p (op0))
4261
        {
4262
          result_type = type1;
4263
          if (extra_warnings && (complain & tf_warning))
4264
            warning (OPT_Wextra,
4265
                     "ordered comparison of pointer with integer zero");
4266
        }
4267
      else if (null_ptr_cst_p (op0) && null_ptr_cst_p (op1))
4268
        /* One of the operands must be of nullptr_t type.  */
4269
        result_type = TREE_TYPE (nullptr_node);
4270
      else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
4271
        {
4272
          result_type = type0;
4273
          if (complain & tf_error)
4274
            permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4275
          else
4276
            return error_mark_node;
4277
        }
4278
      else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
4279
        {
4280
          result_type = type1;
4281
          if (complain & tf_error)
4282
            permerror (input_location, "ISO C++ forbids comparison between pointer and integer");
4283
          else
4284
            return error_mark_node;
4285
        }
4286
      break;
4287
 
4288
    case UNORDERED_EXPR:
4289
    case ORDERED_EXPR:
4290
    case UNLT_EXPR:
4291
    case UNLE_EXPR:
4292
    case UNGT_EXPR:
4293
    case UNGE_EXPR:
4294
    case UNEQ_EXPR:
4295
      build_type = integer_type_node;
4296
      if (code0 != REAL_TYPE || code1 != REAL_TYPE)
4297
        {
4298
          if (complain & tf_error)
4299
            error ("unordered comparison on non-floating point argument");
4300
          return error_mark_node;
4301
        }
4302
      common = 1;
4303
      break;
4304
 
4305
    default:
4306
      break;
4307
    }
4308
 
4309
  if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
4310
        || code0 == ENUMERAL_TYPE)
4311
       && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
4312
           || code1 == COMPLEX_TYPE || code1 == ENUMERAL_TYPE)))
4313
    arithmetic_types_p = 1;
4314
  else
4315
    {
4316
      arithmetic_types_p = 0;
4317
      /* Vector arithmetic is only allowed when both sides are vectors.  */
4318
      if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
4319
        {
4320
          if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
4321
              || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
4322
                                                        TREE_TYPE (type1)))
4323
            {
4324
              binary_op_error (location, code, type0, type1);
4325
              return error_mark_node;
4326
            }
4327
          arithmetic_types_p = 1;
4328
        }
4329
    }
4330
  /* Determine the RESULT_TYPE, if it is not already known.  */
4331
  if (!result_type
4332
      && arithmetic_types_p
4333
      && (shorten || common || short_compare))
4334
    {
4335
      result_type = cp_common_type (type0, type1);
4336
      do_warn_double_promotion (result_type, type0, type1,
4337
                                "implicit conversion from %qT to %qT "
4338
                                "to match other operand of binary "
4339
                                "expression",
4340
                                location);
4341
    }
4342
 
4343
  if (!result_type)
4344
    {
4345
      if (complain & tf_error)
4346
        error ("invalid operands of types %qT and %qT to binary %qO",
4347
               TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
4348
      return error_mark_node;
4349
    }
4350
 
4351
  /* If we're in a template, the only thing we need to know is the
4352
     RESULT_TYPE.  */
4353
  if (processing_template_decl)
4354
    {
4355
      /* Since the middle-end checks the type when doing a build2, we
4356
         need to build the tree in pieces.  This built tree will never
4357
         get out of the front-end as we replace it when instantiating
4358
         the template.  */
4359
      tree tmp = build2 (resultcode,
4360
                         build_type ? build_type : result_type,
4361
                         NULL_TREE, op1);
4362
      TREE_OPERAND (tmp, 0) = op0;
4363
      return tmp;
4364
    }
4365
 
4366
  if (arithmetic_types_p)
4367
    {
4368
      bool first_complex = (code0 == COMPLEX_TYPE);
4369
      bool second_complex = (code1 == COMPLEX_TYPE);
4370
      int none_complex = (!first_complex && !second_complex);
4371
 
4372
      /* Adapted from patch for c/24581.  */
4373
      if (first_complex != second_complex
4374
          && (code == PLUS_EXPR
4375
              || code == MINUS_EXPR
4376
              || code == MULT_EXPR
4377
              || (code == TRUNC_DIV_EXPR && first_complex))
4378
          && TREE_CODE (TREE_TYPE (result_type)) == REAL_TYPE
4379
          && flag_signed_zeros)
4380
        {
4381
          /* An operation on mixed real/complex operands must be
4382
             handled specially, but the language-independent code can
4383
             more easily optimize the plain complex arithmetic if
4384
             -fno-signed-zeros.  */
4385
          tree real_type = TREE_TYPE (result_type);
4386
          tree real, imag;
4387
          if (first_complex)
4388
            {
4389
              if (TREE_TYPE (op0) != result_type)
4390
                op0 = cp_convert_and_check (result_type, op0);
4391
              if (TREE_TYPE (op1) != real_type)
4392
                op1 = cp_convert_and_check (real_type, op1);
4393
            }
4394
          else
4395
            {
4396
              if (TREE_TYPE (op0) != real_type)
4397
                op0 = cp_convert_and_check (real_type, op0);
4398
              if (TREE_TYPE (op1) != result_type)
4399
                op1 = cp_convert_and_check (result_type, op1);
4400
            }
4401
          if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
4402
            return error_mark_node;
4403
          if (first_complex)
4404
            {
4405
              op0 = save_expr (op0);
4406
              real = cp_build_unary_op (REALPART_EXPR, op0, 1, complain);
4407
              imag = cp_build_unary_op (IMAGPART_EXPR, op0, 1, complain);
4408
              switch (code)
4409
                {
4410
                case MULT_EXPR:
4411
                case TRUNC_DIV_EXPR:
4412
                  op1 = save_expr (op1);
4413
                  imag = build2 (resultcode, real_type, imag, op1);
4414
                  /* Fall through.  */
4415
                case PLUS_EXPR:
4416
                case MINUS_EXPR:
4417
                  real = build2 (resultcode, real_type, real, op1);
4418
                  break;
4419
                default:
4420
                  gcc_unreachable();
4421
                }
4422
            }
4423
          else
4424
            {
4425
              op1 = save_expr (op1);
4426
              real = cp_build_unary_op (REALPART_EXPR, op1, 1, complain);
4427
              imag = cp_build_unary_op (IMAGPART_EXPR, op1, 1, complain);
4428
              switch (code)
4429
                {
4430
                case MULT_EXPR:
4431
                  op0 = save_expr (op0);
4432
                  imag = build2 (resultcode, real_type, op0, imag);
4433
                  /* Fall through.  */
4434
                case PLUS_EXPR:
4435
                  real = build2 (resultcode, real_type, op0, real);
4436
                  break;
4437
                case MINUS_EXPR:
4438
                  real = build2 (resultcode, real_type, op0, real);
4439
                  imag = build1 (NEGATE_EXPR, real_type, imag);
4440
                  break;
4441
                default:
4442
                  gcc_unreachable();
4443
                }
4444
            }
4445
          real = fold_if_not_in_template (real);
4446
          imag = fold_if_not_in_template (imag);
4447
          result = build2 (COMPLEX_EXPR, result_type, real, imag);
4448
          result = fold_if_not_in_template (result);
4449
          return result;
4450
        }
4451
 
4452
      /* For certain operations (which identify themselves by shorten != 0)
4453
         if both args were extended from the same smaller type,
4454
         do the arithmetic in that type and then extend.
4455
 
4456
         shorten !=0 and !=1 indicates a bitwise operation.
4457
         For them, this optimization is safe only if
4458
         both args are zero-extended or both are sign-extended.
4459
         Otherwise, we might change the result.
4460
         E.g., (short)-1 | (unsigned short)-1 is (int)-1
4461
         but calculated in (unsigned short) it would be (unsigned short)-1.  */
4462
 
4463
      if (shorten && none_complex)
4464
        {
4465
          final_type = result_type;
4466
          result_type = shorten_binary_op (result_type, op0, op1,
4467
                                           shorten == -1);
4468
        }
4469
 
4470
      /* Comparison operations are shortened too but differently.
4471
         They identify themselves by setting short_compare = 1.  */
4472
 
4473
      if (short_compare)
4474
        {
4475
          /* Don't write &op0, etc., because that would prevent op0
4476
             from being kept in a register.
4477
             Instead, make copies of the our local variables and
4478
             pass the copies by reference, then copy them back afterward.  */
4479
          tree xop0 = op0, xop1 = op1, xresult_type = result_type;
4480
          enum tree_code xresultcode = resultcode;
4481
          tree val
4482
            = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
4483
          if (val != 0)
4484
            return cp_convert (boolean_type_node, val);
4485
          op0 = xop0, op1 = xop1;
4486
          converted = 1;
4487
          resultcode = xresultcode;
4488
        }
4489
 
4490
      if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
4491
          && warn_sign_compare
4492
          /* Do not warn until the template is instantiated; we cannot
4493
             bound the ranges of the arguments until that point.  */
4494
          && !processing_template_decl
4495
          && (complain & tf_warning)
4496
          && c_inhibit_evaluation_warnings == 0
4497
          /* Even unsigned enum types promote to signed int.  We don't
4498
             want to issue -Wsign-compare warnings for this case.  */
4499
          && !enum_cast_to_int (orig_op0)
4500
          && !enum_cast_to_int (orig_op1))
4501
        {
4502
          warn_for_sign_compare (location, orig_op0, orig_op1, op0, op1,
4503
                                 result_type, resultcode);
4504
        }
4505
    }
4506
 
4507
  /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
4508
     Then the expression will be built.
4509
     It will be given type FINAL_TYPE if that is nonzero;
4510
     otherwise, it will be given type RESULT_TYPE.  */
4511
  if (! converted)
4512
    {
4513
      if (TREE_TYPE (op0) != result_type)
4514
        op0 = cp_convert_and_check (result_type, op0);
4515
      if (TREE_TYPE (op1) != result_type)
4516
        op1 = cp_convert_and_check (result_type, op1);
4517
 
4518
      if (op0 == error_mark_node || op1 == error_mark_node)
4519
        return error_mark_node;
4520
    }
4521
 
4522
  if (build_type == NULL_TREE)
4523
    build_type = result_type;
4524
 
4525
  result = build2 (resultcode, build_type, op0, op1);
4526
  result = fold_if_not_in_template (result);
4527
  if (final_type != 0)
4528
    result = cp_convert (final_type, result);
4529
 
4530
  if (TREE_OVERFLOW_P (result)
4531
      && !TREE_OVERFLOW_P (op0)
4532
      && !TREE_OVERFLOW_P (op1))
4533
    overflow_warning (location, result);
4534
 
4535
  return result;
4536
}
4537
 
4538
/* Return a tree for the sum or difference (RESULTCODE says which)
4539
   of pointer PTROP and integer INTOP.  */
4540
 
4541
static tree
4542
cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
4543
{
4544
  tree res_type = TREE_TYPE (ptrop);
4545
 
4546
  /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
4547
     in certain circumstance (when it's valid to do so).  So we need
4548
     to make sure it's complete.  We don't need to check here, if we
4549
     can actually complete it at all, as those checks will be done in
4550
     pointer_int_sum() anyway.  */
4551
  complete_type (TREE_TYPE (res_type));
4552
 
4553
  return pointer_int_sum (input_location, resultcode, ptrop,
4554
                          fold_if_not_in_template (intop));
4555
}
4556
 
4557
/* Return a tree for the difference of pointers OP0 and OP1.
4558
   The resulting tree has type int.  */
4559
 
4560
static tree
4561
pointer_diff (tree op0, tree op1, tree ptrtype)
4562
{
4563
  tree result;
4564
  tree restype = ptrdiff_type_node;
4565
  tree target_type = TREE_TYPE (ptrtype);
4566
 
4567
  if (!complete_type_or_else (target_type, NULL_TREE))
4568
    return error_mark_node;
4569
 
4570
  if (TREE_CODE (target_type) == VOID_TYPE)
4571
    permerror (input_location, "ISO C++ forbids using pointer of type %<void *%> in subtraction");
4572
  if (TREE_CODE (target_type) == FUNCTION_TYPE)
4573
    permerror (input_location, "ISO C++ forbids using pointer to a function in subtraction");
4574
  if (TREE_CODE (target_type) == METHOD_TYPE)
4575
    permerror (input_location, "ISO C++ forbids using pointer to a method in subtraction");
4576
 
4577
  /* First do the subtraction as integers;
4578
     then drop through to build the divide operator.  */
4579
 
4580
  op0 = cp_build_binary_op (input_location,
4581
                            MINUS_EXPR,
4582
                            cp_convert (restype, op0),
4583
                            cp_convert (restype, op1),
4584
                            tf_warning_or_error);
4585
 
4586
  /* This generates an error if op1 is a pointer to an incomplete type.  */
4587
  if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
4588
    error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
4589
 
4590
  op1 = (TYPE_PTROB_P (ptrtype)
4591
         ? size_in_bytes (target_type)
4592
         : integer_one_node);
4593
 
4594
  /* Do the division.  */
4595
 
4596
  result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
4597
  return fold_if_not_in_template (result);
4598
}
4599
 
4600
/* Construct and perhaps optimize a tree representation
4601
   for a unary operation.  CODE, a tree_code, specifies the operation
4602
   and XARG is the operand.  */
4603
 
4604
tree
4605
build_x_unary_op (enum tree_code code, tree xarg, tsubst_flags_t complain)
4606
{
4607
  tree orig_expr = xarg;
4608
  tree exp;
4609
  int ptrmem = 0;
4610
 
4611
  if (processing_template_decl)
4612
    {
4613
      if (type_dependent_expression_p (xarg))
4614
        return build_min_nt (code, xarg, NULL_TREE);
4615
 
4616
      xarg = build_non_dependent_expr (xarg);
4617
    }
4618
 
4619
  exp = NULL_TREE;
4620
 
4621
  /* [expr.unary.op] says:
4622
 
4623
       The address of an object of incomplete type can be taken.
4624
 
4625
     (And is just the ordinary address operator, not an overloaded
4626
     "operator &".)  However, if the type is a template
4627
     specialization, we must complete the type at this point so that
4628
     an overloaded "operator &" will be available if required.  */
4629
  if (code == ADDR_EXPR
4630
      && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
4631
      && ((CLASS_TYPE_P (TREE_TYPE (xarg))
4632
           && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
4633
          || (TREE_CODE (xarg) == OFFSET_REF)))
4634
    /* Don't look for a function.  */;
4635
  else
4636
    exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
4637
                        /*overload=*/NULL, complain);
4638
  if (!exp && code == ADDR_EXPR)
4639
    {
4640
      if (is_overloaded_fn (xarg))
4641
        {
4642
          tree fn = get_first_fn (xarg);
4643
          if (DECL_CONSTRUCTOR_P (fn) || DECL_DESTRUCTOR_P (fn))
4644
            {
4645
              error (DECL_CONSTRUCTOR_P (fn)
4646
                     ? G_("taking address of constructor %qE")
4647
                     : G_("taking address of destructor %qE"),
4648
                     xarg);
4649
              return error_mark_node;
4650
            }
4651
        }
4652
 
4653
      /* A pointer to member-function can be formed only by saying
4654
         &X::mf.  */
4655
      if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
4656
          && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
4657
        {
4658
          if (TREE_CODE (xarg) != OFFSET_REF
4659
              || !TYPE_P (TREE_OPERAND (xarg, 0)))
4660
            {
4661
              error ("invalid use of %qE to form a pointer-to-member-function",
4662
                     xarg);
4663
              if (TREE_CODE (xarg) != OFFSET_REF)
4664
                inform (input_location, "  a qualified-id is required");
4665
              return error_mark_node;
4666
            }
4667
          else
4668
            {
4669
              error ("parentheses around %qE cannot be used to form a"
4670
                     " pointer-to-member-function",
4671
                     xarg);
4672
              PTRMEM_OK_P (xarg) = 1;
4673
            }
4674
        }
4675
 
4676
      if (TREE_CODE (xarg) == OFFSET_REF)
4677
        {
4678
          ptrmem = PTRMEM_OK_P (xarg);
4679
 
4680
          if (!ptrmem && !flag_ms_extensions
4681
              && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
4682
            {
4683
              /* A single non-static member, make sure we don't allow a
4684
                 pointer-to-member.  */
4685
              xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
4686
                             TREE_OPERAND (xarg, 0),
4687
                             ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
4688
              PTRMEM_OK_P (xarg) = ptrmem;
4689
            }
4690
        }
4691
 
4692
      exp = cp_build_addr_expr_strict (xarg, complain);
4693
    }
4694
 
4695
  if (processing_template_decl && exp != error_mark_node)
4696
    exp = build_min_non_dep (code, exp, orig_expr,
4697
                             /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
4698
  if (TREE_CODE (exp) == ADDR_EXPR)
4699
    PTRMEM_OK_P (exp) = ptrmem;
4700
  return exp;
4701
}
4702
 
4703
/* Like c_common_truthvalue_conversion, but handle pointer-to-member
4704
   constants, where a null value is represented by an INTEGER_CST of
4705
   -1.  */
4706
 
4707
tree
4708
cp_truthvalue_conversion (tree expr)
4709
{
4710
  tree type = TREE_TYPE (expr);
4711
  if (TYPE_PTRMEM_P (type))
4712
    return build_binary_op (EXPR_LOCATION (expr),
4713
                            NE_EXPR, expr, nullptr_node, 1);
4714
  else if (TYPE_PTR_P (type) || TYPE_PTRMEMFUNC_P (type))
4715
    {
4716
      /* With -Wzero-as-null-pointer-constant do not warn for an
4717
         'if (p)' or a 'while (!p)', where p is a pointer.  */
4718
      tree ret;
4719
      ++c_inhibit_evaluation_warnings;
4720
      ret = c_common_truthvalue_conversion (input_location, expr);
4721
      --c_inhibit_evaluation_warnings;
4722
      return ret;
4723
    }
4724
  else
4725
    return c_common_truthvalue_conversion (input_location, expr);
4726
}
4727
 
4728
/* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR.  */
4729
 
4730
tree
4731
condition_conversion (tree expr)
4732
{
4733
  tree t;
4734
  if (processing_template_decl)
4735
    return expr;
4736
  t = perform_implicit_conversion_flags (boolean_type_node, expr,
4737
                                         tf_warning_or_error, LOOKUP_NORMAL);
4738
  t = fold_build_cleanup_point_expr (boolean_type_node, t);
4739
  return t;
4740
}
4741
 
4742
/* Returns the address of T.  This function will fold away
4743
   ADDR_EXPR of INDIRECT_REF.  */
4744
 
4745
tree
4746
build_address (tree t)
4747
{
4748
  if (error_operand_p (t) || !cxx_mark_addressable (t))
4749
    return error_mark_node;
4750
  t = build_fold_addr_expr (t);
4751
  if (TREE_CODE (t) != ADDR_EXPR)
4752
    t = rvalue (t);
4753
  return t;
4754
}
4755
 
4756
/* Returns the address of T with type TYPE.  */
4757
 
4758
tree
4759
build_typed_address (tree t, tree type)
4760
{
4761
  if (error_operand_p (t) || !cxx_mark_addressable (t))
4762
    return error_mark_node;
4763
  t = build_fold_addr_expr_with_type (t, type);
4764
  if (TREE_CODE (t) != ADDR_EXPR)
4765
    t = rvalue (t);
4766
  return t;
4767
}
4768
 
4769
/* Return a NOP_EXPR converting EXPR to TYPE.  */
4770
 
4771
tree
4772
build_nop (tree type, tree expr)
4773
{
4774
  if (type == error_mark_node || error_operand_p (expr))
4775
    return expr;
4776
  return build1 (NOP_EXPR, type, expr);
4777
}
4778
 
4779
/* Take the address of ARG, whatever that means under C++ semantics.
4780
   If STRICT_LVALUE is true, require an lvalue; otherwise, allow xvalues
4781
   and class rvalues as well.
4782
 
4783
   Nothing should call this function directly; instead, callers should use
4784
   cp_build_addr_expr or cp_build_addr_expr_strict.  */
4785
 
4786
static tree
4787
cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
4788
{
4789
  tree argtype;
4790
  tree val;
4791
 
4792
  if (!arg || error_operand_p (arg))
4793
    return error_mark_node;
4794
 
4795
  arg = mark_lvalue_use (arg);
4796
  argtype = lvalue_type (arg);
4797
 
4798
  gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
4799
              || !IDENTIFIER_OPNAME_P (arg));
4800
 
4801
  if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4802
      && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4803
    {
4804
      /* They're trying to take the address of a unique non-static
4805
         member function.  This is ill-formed (except in MS-land),
4806
         but let's try to DTRT.
4807
         Note: We only handle unique functions here because we don't
4808
         want to complain if there's a static overload; non-unique
4809
         cases will be handled by instantiate_type.  But we need to
4810
         handle this case here to allow casts on the resulting PMF.
4811
         We could defer this in non-MS mode, but it's easier to give
4812
         a useful error here.  */
4813
 
4814
      /* Inside constant member functions, the `this' pointer
4815
         contains an extra const qualifier.  TYPE_MAIN_VARIANT
4816
         is used here to remove this const from the diagnostics
4817
         and the created OFFSET_REF.  */
4818
      tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4819
      tree fn = get_first_fn (TREE_OPERAND (arg, 1));
4820
      mark_used (fn);
4821
 
4822
      if (! flag_ms_extensions)
4823
        {
4824
          tree name = DECL_NAME (fn);
4825
          if (!(complain & tf_error))
4826
            return error_mark_node;
4827
          else if (current_class_type
4828
                   && TREE_OPERAND (arg, 0) == current_class_ref)
4829
            /* An expression like &memfn.  */
4830
            permerror (input_location, "ISO C++ forbids taking the address of an unqualified"
4831
                       " or parenthesized non-static member function to form"
4832
                       " a pointer to member function.  Say %<&%T::%D%>",
4833
                       base, name);
4834
          else
4835
            permerror (input_location, "ISO C++ forbids taking the address of a bound member"
4836
                       " function to form a pointer to member function."
4837
                       "  Say %<&%T::%D%>",
4838
                       base, name);
4839
        }
4840
      arg = build_offset_ref (base, fn, /*address_p=*/true);
4841
    }
4842
 
4843
  /* Uninstantiated types are all functions.  Taking the
4844
     address of a function is a no-op, so just return the
4845
     argument.  */
4846
  if (type_unknown_p (arg))
4847
    return build1 (ADDR_EXPR, unknown_type_node, arg);
4848
 
4849
  if (TREE_CODE (arg) == OFFSET_REF)
4850
    /* We want a pointer to member; bypass all the code for actually taking
4851
       the address of something.  */
4852
    goto offset_ref;
4853
 
4854
  /* Anything not already handled and not a true memory reference
4855
     is an error.  */
4856
  if (TREE_CODE (argtype) != FUNCTION_TYPE
4857
      && TREE_CODE (argtype) != METHOD_TYPE)
4858
    {
4859
      cp_lvalue_kind kind = lvalue_kind (arg);
4860
      if (kind == clk_none)
4861
        {
4862
          if (complain & tf_error)
4863
            lvalue_error (input_location, lv_addressof);
4864
          return error_mark_node;
4865
        }
4866
      if (strict_lvalue && (kind & (clk_rvalueref|clk_class)))
4867
        {
4868
          if (!(complain & tf_error))
4869
            return error_mark_node;
4870
          if (kind & clk_class)
4871
            /* Make this a permerror because we used to accept it.  */
4872
            permerror (input_location, "taking address of temporary");
4873
          else
4874
            error ("taking address of xvalue (rvalue reference)");
4875
        }
4876
    }
4877
 
4878
  if (TREE_CODE (argtype) == REFERENCE_TYPE)
4879
    {
4880
      tree type = build_pointer_type (TREE_TYPE (argtype));
4881
      arg = build1 (CONVERT_EXPR, type, arg);
4882
      return arg;
4883
    }
4884
  else if (pedantic && DECL_MAIN_P (arg))
4885
    {
4886
      /* ARM $3.4 */
4887
      /* Apparently a lot of autoconf scripts for C++ packages do this,
4888
         so only complain if -pedantic.  */
4889
      if (complain & (flag_pedantic_errors ? tf_error : tf_warning))
4890
        pedwarn (input_location, OPT_pedantic,
4891
                 "ISO C++ forbids taking address of function %<::main%>");
4892
      else if (flag_pedantic_errors)
4893
        return error_mark_node;
4894
    }
4895
 
4896
  /* Let &* cancel out to simplify resulting code.  */
4897
  if (TREE_CODE (arg) == INDIRECT_REF)
4898
    {
4899
      /* We don't need to have `current_class_ptr' wrapped in a
4900
         NON_LVALUE_EXPR node.  */
4901
      if (arg == current_class_ref)
4902
        return current_class_ptr;
4903
 
4904
      arg = TREE_OPERAND (arg, 0);
4905
      if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4906
        {
4907
          tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
4908
          arg = build1 (CONVERT_EXPR, type, arg);
4909
        }
4910
      else
4911
        /* Don't let this be an lvalue.  */
4912
        arg = rvalue (arg);
4913
      return arg;
4914
    }
4915
 
4916
  /* ??? Cope with user tricks that amount to offsetof.  */
4917
  if (TREE_CODE (argtype) != FUNCTION_TYPE
4918
      && TREE_CODE (argtype) != METHOD_TYPE
4919
      && argtype != unknown_type_node
4920
      && (val = get_base_address (arg))
4921
      && COMPLETE_TYPE_P (TREE_TYPE (val))
4922
      && TREE_CODE (val) == INDIRECT_REF
4923
      && TREE_CONSTANT (TREE_OPERAND (val, 0)))
4924
    {
4925
      tree type = build_pointer_type (argtype);
4926
      return fold_convert (type, fold_offsetof_1 (arg));
4927
    }
4928
 
4929
  /* Handle complex lvalues (when permitted)
4930
     by reduction to simpler cases.  */
4931
  val = unary_complex_lvalue (ADDR_EXPR, arg);
4932
  if (val != 0)
4933
    return val;
4934
 
4935
  switch (TREE_CODE (arg))
4936
    {
4937
    CASE_CONVERT:
4938
    case FLOAT_EXPR:
4939
    case FIX_TRUNC_EXPR:
4940
      /* Even if we're not being pedantic, we cannot allow this
4941
         extension when we're instantiating in a SFINAE
4942
         context.  */
4943
      if (! lvalue_p (arg) && complain == tf_none)
4944
        {
4945
          if (complain & tf_error)
4946
            permerror (input_location, "ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4947
          else
4948
            return error_mark_node;
4949
        }
4950
      break;
4951
 
4952
    case BASELINK:
4953
      arg = BASELINK_FUNCTIONS (arg);
4954
      /* Fall through.  */
4955
 
4956
    case OVERLOAD:
4957
      arg = OVL_CURRENT (arg);
4958
      break;
4959
 
4960
    case OFFSET_REF:
4961
    offset_ref:
4962
      /* Turn a reference to a non-static data member into a
4963
         pointer-to-member.  */
4964
      {
4965
        tree type;
4966
        tree t;
4967
 
4968
        gcc_assert (PTRMEM_OK_P (arg));
4969
 
4970
        t = TREE_OPERAND (arg, 1);
4971
        if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4972
          {
4973
            if (complain & tf_error)
4974
              error ("cannot create pointer to reference member %qD", t);
4975
            return error_mark_node;
4976
          }
4977
 
4978
        type = build_ptrmem_type (context_for_name_lookup (t),
4979
                                  TREE_TYPE (t));
4980
        t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4981
        return t;
4982
      }
4983
 
4984
    default:
4985
      break;
4986
    }
4987
 
4988
  if (argtype != error_mark_node)
4989
    argtype = build_pointer_type (argtype);
4990
 
4991
  /* In a template, we are processing a non-dependent expression
4992
     so we can just form an ADDR_EXPR with the correct type.  */
4993
  if (processing_template_decl || TREE_CODE (arg) != COMPONENT_REF)
4994
    {
4995
      val = build_address (arg);
4996
      if (TREE_CODE (arg) == OFFSET_REF)
4997
        PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4998
    }
4999
  else if (BASELINK_P (TREE_OPERAND (arg, 1)))
5000
    {
5001
      tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
5002
 
5003
      /* We can only get here with a single static member
5004
         function.  */
5005
      gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
5006
                  && DECL_STATIC_FUNCTION_P (fn));
5007
      mark_used (fn);
5008
      val = build_address (fn);
5009
      if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
5010
        /* Do not lose object's side effects.  */
5011
        val = build2 (COMPOUND_EXPR, TREE_TYPE (val),
5012
                      TREE_OPERAND (arg, 0), val);
5013
    }
5014
  else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
5015
    {
5016
      if (complain & tf_error)
5017
        error ("attempt to take address of bit-field structure member %qD",
5018
               TREE_OPERAND (arg, 1));
5019
      return error_mark_node;
5020
    }
5021
  else
5022
    {
5023
      tree object = TREE_OPERAND (arg, 0);
5024
      tree field = TREE_OPERAND (arg, 1);
5025
      gcc_assert (same_type_ignoring_top_level_qualifiers_p
5026
                  (TREE_TYPE (object), decl_type_context (field)));
5027
      val = build_address (arg);
5028
    }
5029
 
5030
  if (TREE_CODE (argtype) == POINTER_TYPE
5031
      && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
5032
    {
5033
      build_ptrmemfunc_type (argtype);
5034
      val = build_ptrmemfunc (argtype, val, 0,
5035
                              /*c_cast_p=*/false,
5036
                              tf_warning_or_error);
5037
    }
5038
 
5039
  return val;
5040
}
5041
 
5042
/* Take the address of ARG if it has one, even if it's an rvalue.  */
5043
 
5044
tree
5045
cp_build_addr_expr (tree arg, tsubst_flags_t complain)
5046
{
5047
  return cp_build_addr_expr_1 (arg, 0, complain);
5048
}
5049
 
5050
/* Take the address of ARG, but only if it's an lvalue.  */
5051
 
5052
tree
5053
cp_build_addr_expr_strict (tree arg, tsubst_flags_t complain)
5054
{
5055
  return cp_build_addr_expr_1 (arg, 1, complain);
5056
}
5057
 
5058
/* C++: Must handle pointers to members.
5059
 
5060
   Perhaps type instantiation should be extended to handle conversion
5061
   from aggregates to types we don't yet know we want?  (Or are those
5062
   cases typically errors which should be reported?)
5063
 
5064
   NOCONVERT nonzero suppresses the default promotions
5065
   (such as from short to int).  */
5066
 
5067
tree
5068
cp_build_unary_op (enum tree_code code, tree xarg, int noconvert,
5069
                   tsubst_flags_t complain)
5070
{
5071
  /* No default_conversion here.  It causes trouble for ADDR_EXPR.  */
5072
  tree arg = xarg;
5073
  tree argtype = 0;
5074
  const char *errstring = NULL;
5075
  tree val;
5076
  const char *invalid_op_diag;
5077
 
5078
  if (!arg || error_operand_p (arg))
5079
    return error_mark_node;
5080
 
5081
  if ((invalid_op_diag
5082
       = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
5083
                                    ? CONVERT_EXPR
5084
                                    : code),
5085
                                   TREE_TYPE (xarg))))
5086
    {
5087
      error (invalid_op_diag);
5088
      return error_mark_node;
5089
    }
5090
 
5091
  switch (code)
5092
    {
5093
    case UNARY_PLUS_EXPR:
5094
    case NEGATE_EXPR:
5095
      {
5096
        int flags = WANT_ARITH | WANT_ENUM;
5097
        /* Unary plus (but not unary minus) is allowed on pointers.  */
5098
        if (code == UNARY_PLUS_EXPR)
5099
          flags |= WANT_POINTER;
5100
        arg = build_expr_type_conversion (flags, arg, true);
5101
        if (!arg)
5102
          errstring = (code == NEGATE_EXPR
5103
                       ? _("wrong type argument to unary minus")
5104
                       : _("wrong type argument to unary plus"));
5105
        else
5106
          {
5107
            if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
5108
              arg = perform_integral_promotions (arg);
5109
 
5110
            /* Make sure the result is not an lvalue: a unary plus or minus
5111
               expression is always a rvalue.  */
5112
            arg = rvalue (arg);
5113
          }
5114
      }
5115
      break;
5116
 
5117
    case BIT_NOT_EXPR:
5118
      if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
5119
        {
5120
          code = CONJ_EXPR;
5121
          if (!noconvert)
5122
            arg = default_conversion (arg);
5123
        }
5124
      else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM
5125
                                                   | WANT_VECTOR_OR_COMPLEX,
5126
                                                   arg, true)))
5127
        errstring = _("wrong type argument to bit-complement");
5128
      else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
5129
        arg = perform_integral_promotions (arg);
5130
      break;
5131
 
5132
    case ABS_EXPR:
5133
      if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
5134
        errstring = _("wrong type argument to abs");
5135
      else if (!noconvert)
5136
        arg = default_conversion (arg);
5137
      break;
5138
 
5139
    case CONJ_EXPR:
5140
      /* Conjugating a real value is a no-op, but allow it anyway.  */
5141
      if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
5142
        errstring = _("wrong type argument to conjugation");
5143
      else if (!noconvert)
5144
        arg = default_conversion (arg);
5145
      break;
5146
 
5147
    case TRUTH_NOT_EXPR:
5148
      arg = perform_implicit_conversion (boolean_type_node, arg,
5149
                                         complain);
5150
      val = invert_truthvalue_loc (input_location, arg);
5151
      if (arg != error_mark_node)
5152
        return val;
5153
      errstring = _("in argument to unary !");
5154
      break;
5155
 
5156
    case NOP_EXPR:
5157
      break;
5158
 
5159
    case REALPART_EXPR:
5160
    case IMAGPART_EXPR:
5161
      arg = build_real_imag_expr (input_location, code, arg);
5162
      if (arg == error_mark_node)
5163
        return arg;
5164
      else
5165
        return fold_if_not_in_template (arg);
5166
 
5167
    case PREINCREMENT_EXPR:
5168
    case POSTINCREMENT_EXPR:
5169
    case PREDECREMENT_EXPR:
5170
    case POSTDECREMENT_EXPR:
5171
      /* Handle complex lvalues (when permitted)
5172
         by reduction to simpler cases.  */
5173
 
5174
      val = unary_complex_lvalue (code, arg);
5175
      if (val != 0)
5176
        return val;
5177
 
5178
      arg = mark_lvalue_use (arg);
5179
 
5180
      /* Increment or decrement the real part of the value,
5181
         and don't change the imaginary part.  */
5182
      if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
5183
        {
5184
          tree real, imag;
5185
 
5186
          arg = stabilize_reference (arg);
5187
          real = cp_build_unary_op (REALPART_EXPR, arg, 1, complain);
5188
          imag = cp_build_unary_op (IMAGPART_EXPR, arg, 1, complain);
5189
          real = cp_build_unary_op (code, real, 1, complain);
5190
          if (real == error_mark_node || imag == error_mark_node)
5191
            return error_mark_node;
5192
          return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
5193
                         real, imag);
5194
        }
5195
 
5196
      /* Report invalid types.  */
5197
 
5198
      if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
5199
                                              arg, true)))
5200
        {
5201
          if (code == PREINCREMENT_EXPR)
5202
            errstring = _("no pre-increment operator for type");
5203
          else if (code == POSTINCREMENT_EXPR)
5204
            errstring = _("no post-increment operator for type");
5205
          else if (code == PREDECREMENT_EXPR)
5206
            errstring = _("no pre-decrement operator for type");
5207
          else
5208
            errstring = _("no post-decrement operator for type");
5209
          break;
5210
        }
5211
      else if (arg == error_mark_node)
5212
        return error_mark_node;
5213
 
5214
      /* Report something read-only.  */
5215
 
5216
      if (CP_TYPE_CONST_P (TREE_TYPE (arg))
5217
          || TREE_READONLY (arg))
5218
        {
5219
          if (complain & tf_error)
5220
            cxx_readonly_error (arg, ((code == PREINCREMENT_EXPR
5221
                                      || code == POSTINCREMENT_EXPR)
5222
                                     ? lv_increment : lv_decrement));
5223
          else
5224
            return error_mark_node;
5225
        }
5226
 
5227
      {
5228
        tree inc;
5229
        tree declared_type = unlowered_expr_type (arg);
5230
 
5231
        argtype = TREE_TYPE (arg);
5232
 
5233
        /* ARM $5.2.5 last annotation says this should be forbidden.  */
5234
        if (TREE_CODE (argtype) == ENUMERAL_TYPE)
5235
          {
5236
            if (complain & tf_error)
5237
              permerror (input_location, (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
5238
                         ? G_("ISO C++ forbids incrementing an enum")
5239
                         : G_("ISO C++ forbids decrementing an enum"));
5240
            else
5241
              return error_mark_node;
5242
          }
5243
 
5244
        /* Compute the increment.  */
5245
 
5246
        if (TREE_CODE (argtype) == POINTER_TYPE)
5247
          {
5248
            tree type = complete_type (TREE_TYPE (argtype));
5249
 
5250
            if (!COMPLETE_OR_VOID_TYPE_P (type))
5251
              {
5252
                if (complain & tf_error)
5253
                  error (((code == PREINCREMENT_EXPR
5254
                           || code == POSTINCREMENT_EXPR))
5255
                         ? G_("cannot increment a pointer to incomplete type %qT")
5256
                         : G_("cannot decrement a pointer to incomplete type %qT"),
5257
                         TREE_TYPE (argtype));
5258
                else
5259
                  return error_mark_node;
5260
              }
5261
            else if ((pedantic || warn_pointer_arith)
5262
                     && !TYPE_PTROB_P (argtype))
5263
              {
5264
                if (complain & tf_error)
5265
                  permerror (input_location, (code == PREINCREMENT_EXPR
5266
                              || code == POSTINCREMENT_EXPR)
5267
                             ? G_("ISO C++ forbids incrementing a pointer of type %qT")
5268
                             : G_("ISO C++ forbids decrementing a pointer of type %qT"),
5269
                             argtype);
5270
                else
5271
                  return error_mark_node;
5272
              }
5273
 
5274
            inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
5275
          }
5276
        else
5277
          inc = integer_one_node;
5278
 
5279
        inc = cp_convert (argtype, inc);
5280
 
5281
        /* If 'arg' is an Objective-C PROPERTY_REF expression, then we
5282
           need to ask Objective-C to build the increment or decrement
5283
           expression for it.  */
5284
        if (objc_is_property_ref (arg))
5285
          return objc_build_incr_expr_for_property_ref (input_location, code,
5286
                                                        arg, inc);
5287
 
5288
        /* Complain about anything else that is not a true lvalue.  */
5289
        if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
5290
                                    || code == POSTINCREMENT_EXPR)
5291
                                   ? lv_increment : lv_decrement),
5292
                             complain))
5293
          return error_mark_node;
5294
 
5295
        /* Forbid using -- on `bool'.  */
5296
        if (TREE_CODE (declared_type) == BOOLEAN_TYPE)
5297
          {
5298
            if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
5299
              {
5300
                if (complain & tf_error)
5301
                  error ("invalid use of Boolean expression as operand "
5302
                         "to %<operator--%>");
5303
                return error_mark_node;
5304
              }
5305
            val = boolean_increment (code, arg);
5306
          }
5307
        else if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5308
          /* An rvalue has no cv-qualifiers.  */
5309
          val = build2 (code, cv_unqualified (TREE_TYPE (arg)), arg, inc);
5310
        else
5311
          val = build2 (code, TREE_TYPE (arg), arg, inc);
5312
 
5313
        TREE_SIDE_EFFECTS (val) = 1;
5314
        return val;
5315
      }
5316
 
5317
    case ADDR_EXPR:
5318
      /* Note that this operation never does default_conversion
5319
         regardless of NOCONVERT.  */
5320
      return cp_build_addr_expr (arg, complain);
5321
 
5322
    default:
5323
      break;
5324
    }
5325
 
5326
  if (!errstring)
5327
    {
5328
      if (argtype == 0)
5329
        argtype = TREE_TYPE (arg);
5330
      return fold_if_not_in_template (build1 (code, argtype, arg));
5331
    }
5332
 
5333
  if (complain & tf_error)
5334
    error ("%s", errstring);
5335
  return error_mark_node;
5336
}
5337
 
5338
/* Hook for the c-common bits that build a unary op.  */
5339
tree
5340
build_unary_op (location_t location ATTRIBUTE_UNUSED,
5341
                enum tree_code code, tree xarg, int noconvert)
5342
{
5343
  return cp_build_unary_op (code, xarg, noconvert, tf_warning_or_error);
5344
}
5345
 
5346
/* Apply unary lvalue-demanding operator CODE to the expression ARG
5347
   for certain kinds of expressions which are not really lvalues
5348
   but which we can accept as lvalues.
5349
 
5350
   If ARG is not a kind of expression we can handle, return
5351
   NULL_TREE.  */
5352
 
5353
tree
5354
unary_complex_lvalue (enum tree_code code, tree arg)
5355
{
5356
  /* Inside a template, making these kinds of adjustments is
5357
     pointless; we are only concerned with the type of the
5358
     expression.  */
5359
  if (processing_template_decl)
5360
    return NULL_TREE;
5361
 
5362
  /* Handle (a, b) used as an "lvalue".  */
5363
  if (TREE_CODE (arg) == COMPOUND_EXPR)
5364
    {
5365
      tree real_result = cp_build_unary_op (code, TREE_OPERAND (arg, 1), 0,
5366
                                            tf_warning_or_error);
5367
      return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
5368
                     TREE_OPERAND (arg, 0), real_result);
5369
    }
5370
 
5371
  /* Handle (a ? b : c) used as an "lvalue".  */
5372
  if (TREE_CODE (arg) == COND_EXPR
5373
      || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
5374
    return rationalize_conditional_expr (code, arg, tf_warning_or_error);
5375
 
5376
  /* Handle (a = b), (++a), and (--a) used as an "lvalue".  */
5377
  if (TREE_CODE (arg) == MODIFY_EXPR
5378
      || TREE_CODE (arg) == PREINCREMENT_EXPR
5379
      || TREE_CODE (arg) == PREDECREMENT_EXPR)
5380
    {
5381
      tree lvalue = TREE_OPERAND (arg, 0);
5382
      if (TREE_SIDE_EFFECTS (lvalue))
5383
        {
5384
          lvalue = stabilize_reference (lvalue);
5385
          arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
5386
                        lvalue, TREE_OPERAND (arg, 1));
5387
        }
5388
      return unary_complex_lvalue
5389
        (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
5390
    }
5391
 
5392
  if (code != ADDR_EXPR)
5393
    return NULL_TREE;
5394
 
5395
  /* Handle (a = b) used as an "lvalue" for `&'.  */
5396
  if (TREE_CODE (arg) == MODIFY_EXPR
5397
      || TREE_CODE (arg) == INIT_EXPR)
5398
    {
5399
      tree real_result = cp_build_unary_op (code, TREE_OPERAND (arg, 0), 0,
5400
                                            tf_warning_or_error);
5401
      arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
5402
                    arg, real_result);
5403
      TREE_NO_WARNING (arg) = 1;
5404
      return arg;
5405
    }
5406
 
5407
  if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
5408
      || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
5409
      || TREE_CODE (arg) == OFFSET_REF)
5410
    return NULL_TREE;
5411
 
5412
  /* We permit compiler to make function calls returning
5413
     objects of aggregate type look like lvalues.  */
5414
  {
5415
    tree targ = arg;
5416
 
5417
    if (TREE_CODE (targ) == SAVE_EXPR)
5418
      targ = TREE_OPERAND (targ, 0);
5419
 
5420
    if (TREE_CODE (targ) == CALL_EXPR && MAYBE_CLASS_TYPE_P (TREE_TYPE (targ)))
5421
      {
5422
        if (TREE_CODE (arg) == SAVE_EXPR)
5423
          targ = arg;
5424
        else
5425
          targ = build_cplus_new (TREE_TYPE (arg), arg, tf_warning_or_error);
5426
        return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
5427
      }
5428
 
5429
    if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
5430
      return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
5431
                     TREE_OPERAND (targ, 0), current_function_decl, NULL);
5432
  }
5433
 
5434
  /* Don't let anything else be handled specially.  */
5435
  return NULL_TREE;
5436
}
5437
 
5438
/* Mark EXP saying that we need to be able to take the
5439
   address of it; it should not be allocated in a register.
5440
   Value is true if successful.
5441
 
5442
   C++: we do not allow `current_class_ptr' to be addressable.  */
5443
 
5444
bool
5445
cxx_mark_addressable (tree exp)
5446
{
5447
  tree x = exp;
5448
 
5449
  while (1)
5450
    switch (TREE_CODE (x))
5451
      {
5452
      case ADDR_EXPR:
5453
      case COMPONENT_REF:
5454
      case ARRAY_REF:
5455
      case REALPART_EXPR:
5456
      case IMAGPART_EXPR:
5457
        x = TREE_OPERAND (x, 0);
5458
        break;
5459
 
5460
      case PARM_DECL:
5461
        if (x == current_class_ptr)
5462
          {
5463
            error ("cannot take the address of %<this%>, which is an rvalue expression");
5464
            TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later.  */
5465
            return true;
5466
          }
5467
        /* Fall through.  */
5468
 
5469
      case VAR_DECL:
5470
        /* Caller should not be trying to mark initialized
5471
           constant fields addressable.  */
5472
        gcc_assert (DECL_LANG_SPECIFIC (x) == 0
5473
                    || DECL_IN_AGGR_P (x) == 0
5474
                    || TREE_STATIC (x)
5475
                    || DECL_EXTERNAL (x));
5476
        /* Fall through.  */
5477
 
5478
      case RESULT_DECL:
5479
        if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
5480
            && !DECL_ARTIFICIAL (x))
5481
          {
5482
            if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x))
5483
              {
5484
                error
5485
                  ("address of explicit register variable %qD requested", x);
5486
                return false;
5487
              }
5488
            else if (extra_warnings)
5489
              warning
5490
                (OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
5491
          }
5492
        TREE_ADDRESSABLE (x) = 1;
5493
        return true;
5494
 
5495
      case CONST_DECL:
5496
      case FUNCTION_DECL:
5497
        TREE_ADDRESSABLE (x) = 1;
5498
        return true;
5499
 
5500
      case CONSTRUCTOR:
5501
        TREE_ADDRESSABLE (x) = 1;
5502
        return true;
5503
 
5504
      case TARGET_EXPR:
5505
        TREE_ADDRESSABLE (x) = 1;
5506
        cxx_mark_addressable (TREE_OPERAND (x, 0));
5507
        return true;
5508
 
5509
      default:
5510
        return true;
5511
    }
5512
}
5513
 
5514
/* Build and return a conditional expression IFEXP ? OP1 : OP2.  */
5515
 
5516
tree
5517
build_x_conditional_expr (tree ifexp, tree op1, tree op2,
5518
                          tsubst_flags_t complain)
5519
{
5520
  tree orig_ifexp = ifexp;
5521
  tree orig_op1 = op1;
5522
  tree orig_op2 = op2;
5523
  tree expr;
5524
 
5525
  if (processing_template_decl)
5526
    {
5527
      /* The standard says that the expression is type-dependent if
5528
         IFEXP is type-dependent, even though the eventual type of the
5529
         expression doesn't dependent on IFEXP.  */
5530
      if (type_dependent_expression_p (ifexp)
5531
          /* As a GNU extension, the middle operand may be omitted.  */
5532
          || (op1 && type_dependent_expression_p (op1))
5533
          || type_dependent_expression_p (op2))
5534
        return build_min_nt (COND_EXPR, ifexp, op1, op2);
5535
      ifexp = build_non_dependent_expr (ifexp);
5536
      if (op1)
5537
        op1 = build_non_dependent_expr (op1);
5538
      op2 = build_non_dependent_expr (op2);
5539
    }
5540
 
5541
  expr = build_conditional_expr (ifexp, op1, op2, complain);
5542
  if (processing_template_decl && expr != error_mark_node)
5543
    {
5544
      tree min = build_min_non_dep (COND_EXPR, expr,
5545
                                    orig_ifexp, orig_op1, orig_op2);
5546
      /* In C++11, remember that the result is an lvalue or xvalue.
5547
         In C++98, lvalue_kind can just assume lvalue in a template.  */
5548
      if (cxx_dialect >= cxx0x
5549
          && lvalue_or_rvalue_with_address_p (expr)
5550
          && !lvalue_or_rvalue_with_address_p (min))
5551
        TREE_TYPE (min) = cp_build_reference_type (TREE_TYPE (min),
5552
                                                   !real_lvalue_p (expr));
5553
      expr = convert_from_reference (min);
5554
    }
5555
  return expr;
5556
}
5557
 
5558
/* Given a list of expressions, return a compound expression
5559
   that performs them all and returns the value of the last of them.  */
5560
 
5561
tree
5562
build_x_compound_expr_from_list (tree list, expr_list_kind exp,
5563
                                 tsubst_flags_t complain)
5564
{
5565
  tree expr = TREE_VALUE (list);
5566
 
5567
  if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5568
      && !CONSTRUCTOR_IS_DIRECT_INIT (expr))
5569
    {
5570
      if (complain & tf_error)
5571
        pedwarn (EXPR_LOC_OR_HERE (expr), 0, "list-initializer for "
5572
                 "non-class type must not be parenthesized");
5573
      else
5574
        return error_mark_node;
5575
    }
5576
 
5577
  if (TREE_CHAIN (list))
5578
    {
5579
      if (complain & tf_error)
5580
        switch (exp)
5581
          {
5582
          case ELK_INIT:
5583
            permerror (input_location, "expression list treated as compound "
5584
                                       "expression in initializer");
5585
            break;
5586
          case ELK_MEM_INIT:
5587
            permerror (input_location, "expression list treated as compound "
5588
                                       "expression in mem-initializer");
5589
            break;
5590
          case ELK_FUNC_CAST:
5591
            permerror (input_location, "expression list treated as compound "
5592
                                       "expression in functional cast");
5593
            break;
5594
          default:
5595
            gcc_unreachable ();
5596
          }
5597
      else
5598
        return error_mark_node;
5599
 
5600
      for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
5601
        expr = build_x_compound_expr (expr, TREE_VALUE (list),
5602
                                      complain);
5603
    }
5604
 
5605
  return expr;
5606
}
5607
 
5608
/* Like build_x_compound_expr_from_list, but using a VEC.  */
5609
 
5610
tree
5611
build_x_compound_expr_from_vec (VEC(tree,gc) *vec, const char *msg)
5612
{
5613
  if (VEC_empty (tree, vec))
5614
    return NULL_TREE;
5615
  else if (VEC_length (tree, vec) == 1)
5616
    return VEC_index (tree, vec, 0);
5617
  else
5618
    {
5619
      tree expr;
5620
      unsigned int ix;
5621
      tree t;
5622
 
5623
      if (msg != NULL)
5624
        permerror (input_location,
5625
                   "%s expression list treated as compound expression",
5626
                   msg);
5627
 
5628
      expr = VEC_index (tree, vec, 0);
5629
      for (ix = 1; VEC_iterate (tree, vec, ix, t); ++ix)
5630
        expr = build_x_compound_expr (expr, t, tf_warning_or_error);
5631
 
5632
      return expr;
5633
    }
5634
}
5635
 
5636
/* Handle overloading of the ',' operator when needed.  */
5637
 
5638
tree
5639
build_x_compound_expr (tree op1, tree op2, tsubst_flags_t complain)
5640
{
5641
  tree result;
5642
  tree orig_op1 = op1;
5643
  tree orig_op2 = op2;
5644
 
5645
  if (processing_template_decl)
5646
    {
5647
      if (type_dependent_expression_p (op1)
5648
          || type_dependent_expression_p (op2))
5649
        return build_min_nt (COMPOUND_EXPR, op1, op2);
5650
      op1 = build_non_dependent_expr (op1);
5651
      op2 = build_non_dependent_expr (op2);
5652
    }
5653
 
5654
  result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
5655
                         /*overload=*/NULL, complain);
5656
  if (!result)
5657
    result = cp_build_compound_expr (op1, op2, complain);
5658
 
5659
  if (processing_template_decl && result != error_mark_node)
5660
    return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
5661
 
5662
  return result;
5663
}
5664
 
5665
/* Like cp_build_compound_expr, but for the c-common bits.  */
5666
 
5667
tree
5668
build_compound_expr (location_t loc ATTRIBUTE_UNUSED, tree lhs, tree rhs)
5669
{
5670
  return cp_build_compound_expr (lhs, rhs, tf_warning_or_error);
5671
}
5672
 
5673
/* Build a compound expression.  */
5674
 
5675
tree
5676
cp_build_compound_expr (tree lhs, tree rhs, tsubst_flags_t complain)
5677
{
5678
  lhs = convert_to_void (lhs, ICV_LEFT_OF_COMMA, complain);
5679
 
5680
  if (lhs == error_mark_node || rhs == error_mark_node)
5681
    return error_mark_node;
5682
 
5683
  if (TREE_CODE (rhs) == TARGET_EXPR)
5684
    {
5685
      /* If the rhs is a TARGET_EXPR, then build the compound
5686
         expression inside the target_expr's initializer. This
5687
         helps the compiler to eliminate unnecessary temporaries.  */
5688
      tree init = TREE_OPERAND (rhs, 1);
5689
 
5690
      init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
5691
      TREE_OPERAND (rhs, 1) = init;
5692
 
5693
      return rhs;
5694
    }
5695
 
5696
  if (type_unknown_p (rhs))
5697
    {
5698
      error ("no context to resolve type of %qE", rhs);
5699
      return error_mark_node;
5700
    }
5701
 
5702
  return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
5703
}
5704
 
5705
/* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
5706
   casts away constness.  CAST gives the type of cast.  Returns true
5707
   if the cast is ill-formed, false if it is well-formed.
5708
 
5709
   ??? This function warns for casting away any qualifier not just
5710
   const.  We would like to specify exactly what qualifiers are casted
5711
   away.
5712
*/
5713
 
5714
static bool
5715
check_for_casting_away_constness (tree src_type, tree dest_type,
5716
                                  enum tree_code cast, tsubst_flags_t complain)
5717
{
5718
  /* C-style casts are allowed to cast away constness.  With
5719
     WARN_CAST_QUAL, we still want to issue a warning.  */
5720
  if (cast == CAST_EXPR && !warn_cast_qual)
5721
    return false;
5722
 
5723
  if (!casts_away_constness (src_type, dest_type))
5724
    return false;
5725
 
5726
  switch (cast)
5727
    {
5728
    case CAST_EXPR:
5729
      if (complain & tf_warning)
5730
        warning (OPT_Wcast_qual,
5731
                 "cast from type %qT to type %qT casts away qualifiers",
5732
                 src_type, dest_type);
5733
      return false;
5734
 
5735
    case STATIC_CAST_EXPR:
5736
      if (complain & tf_error)
5737
        error ("static_cast from type %qT to type %qT casts away qualifiers",
5738
               src_type, dest_type);
5739
      return true;
5740
 
5741
    case REINTERPRET_CAST_EXPR:
5742
      if (complain & tf_error)
5743
        error ("reinterpret_cast from type %qT to type %qT casts away qualifiers",
5744
               src_type, dest_type);
5745
      return true;
5746
 
5747
    default:
5748
      gcc_unreachable();
5749
    }
5750
}
5751
 
5752
/* Convert EXPR (an expression with pointer-to-member type) to TYPE
5753
   (another pointer-to-member type in the same hierarchy) and return
5754
   the converted expression.  If ALLOW_INVERSE_P is permitted, a
5755
   pointer-to-derived may be converted to pointer-to-base; otherwise,
5756
   only the other direction is permitted.  If C_CAST_P is true, this
5757
   conversion is taking place as part of a C-style cast.  */
5758
 
5759
tree
5760
convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
5761
                bool c_cast_p, tsubst_flags_t complain)
5762
{
5763
  if (TYPE_PTRMEM_P (type))
5764
    {
5765
      tree delta;
5766
 
5767
      if (TREE_CODE (expr) == PTRMEM_CST)
5768
        expr = cplus_expand_constant (expr);
5769
      delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
5770
                                    TYPE_PTRMEM_CLASS_TYPE (type),
5771
                                    allow_inverse_p,
5772
                                    c_cast_p, complain);
5773
      if (delta == error_mark_node)
5774
        return error_mark_node;
5775
 
5776
      if (!integer_zerop (delta))
5777
        {
5778
          tree cond, op1, op2;
5779
 
5780
          cond = cp_build_binary_op (input_location,
5781
                                     EQ_EXPR,
5782
                                     expr,
5783
                                     build_int_cst (TREE_TYPE (expr), -1),
5784
                                     tf_warning_or_error);
5785
          op1 = build_nop (ptrdiff_type_node, expr);
5786
          op2 = cp_build_binary_op (input_location,
5787
                                    PLUS_EXPR, op1, delta,
5788
                                    tf_warning_or_error);
5789
 
5790
          expr = fold_build3_loc (input_location,
5791
                              COND_EXPR, ptrdiff_type_node, cond, op1, op2);
5792
 
5793
        }
5794
 
5795
      return build_nop (type, expr);
5796
    }
5797
  else
5798
    return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
5799
                             allow_inverse_p, c_cast_p, complain);
5800
}
5801
 
5802
/* Perform a static_cast from EXPR to TYPE.  When C_CAST_P is true,
5803
   this static_cast is being attempted as one of the possible casts
5804
   allowed by a C-style cast.  (In that case, accessibility of base
5805
   classes is not considered, and it is OK to cast away
5806
   constness.)  Return the result of the cast.  *VALID_P is set to
5807
   indicate whether or not the cast was valid.  */
5808
 
5809
static tree
5810
build_static_cast_1 (tree type, tree expr, bool c_cast_p,
5811
                     bool *valid_p, tsubst_flags_t complain)
5812
{
5813
  tree intype;
5814
  tree result;
5815
  cp_lvalue_kind clk;
5816
 
5817
  /* Assume the cast is valid.  */
5818
  *valid_p = true;
5819
 
5820
  intype = unlowered_expr_type (expr);
5821
 
5822
  /* Save casted types in the function's used types hash table.  */
5823
  used_types_insert (type);
5824
 
5825
  /* [expr.static.cast]
5826
 
5827
     An lvalue of type "cv1 B", where B is a class type, can be cast
5828
     to type "reference to cv2 D", where D is a class derived (clause
5829
     _class.derived_) from B, if a valid standard conversion from
5830
     "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
5831
     same cv-qualification as, or greater cv-qualification than, cv1,
5832
     and B is not a virtual base class of D.  */
5833
  /* We check this case before checking the validity of "TYPE t =
5834
     EXPR;" below because for this case:
5835
 
5836
       struct B {};
5837
       struct D : public B { D(const B&); };
5838
       extern B& b;
5839
       void f() { static_cast<const D&>(b); }
5840
 
5841
     we want to avoid constructing a new D.  The standard is not
5842
     completely clear about this issue, but our interpretation is
5843
     consistent with other compilers.  */
5844
  if (TREE_CODE (type) == REFERENCE_TYPE
5845
      && CLASS_TYPE_P (TREE_TYPE (type))
5846
      && CLASS_TYPE_P (intype)
5847
      && (TYPE_REF_IS_RVALUE (type) || real_lvalue_p (expr))
5848
      && DERIVED_FROM_P (intype, TREE_TYPE (type))
5849
      && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
5850
                      build_pointer_type (TYPE_MAIN_VARIANT
5851
                                          (TREE_TYPE (type))))
5852
      && (c_cast_p
5853
          || at_least_as_qualified_p (TREE_TYPE (type), intype)))
5854
    {
5855
      tree base;
5856
 
5857
      /* There is a standard conversion from "D*" to "B*" even if "B"
5858
         is ambiguous or inaccessible.  If this is really a
5859
         static_cast, then we check both for inaccessibility and
5860
         ambiguity.  However, if this is a static_cast being performed
5861
         because the user wrote a C-style cast, then accessibility is
5862
         not considered.  */
5863
      base = lookup_base (TREE_TYPE (type), intype,
5864
                          c_cast_p ? ba_unique : ba_check,
5865
                          NULL);
5866
 
5867
      /* Convert from "B*" to "D*".  This function will check that "B"
5868
         is not a virtual base of "D".  */
5869
      expr = build_base_path (MINUS_EXPR, build_address (expr),
5870
                              base, /*nonnull=*/false, complain);
5871
      /* Convert the pointer to a reference -- but then remember that
5872
         there are no expressions with reference type in C++.
5873
 
5874
         We call rvalue so that there's an actual tree code
5875
         (NON_LVALUE_EXPR) for the static_cast; otherwise, if the operand
5876
         is a variable with the same type, the conversion would get folded
5877
         away, leaving just the variable and causing lvalue_kind to give
5878
         the wrong answer.  */
5879
      return convert_from_reference (rvalue (cp_fold_convert (type, expr)));
5880
    }
5881
 
5882
  /* "A glvalue of type cv1 T1 can be cast to type rvalue reference to
5883
     cv2 T2 if cv2 T2 is reference-compatible with cv1 T1 (8.5.3)."  */
5884
  if (TREE_CODE (type) == REFERENCE_TYPE
5885
      && TYPE_REF_IS_RVALUE (type)
5886
      && (clk = real_lvalue_p (expr))
5887
      && reference_related_p (TREE_TYPE (type), intype)
5888
      && (c_cast_p || at_least_as_qualified_p (TREE_TYPE (type), intype)))
5889
    {
5890
      if (clk == clk_ordinary)
5891
        {
5892
          /* Handle the (non-bit-field) lvalue case here by casting to
5893
             lvalue reference and then changing it to an rvalue reference.
5894
             Casting an xvalue to rvalue reference will be handled by the
5895
             main code path.  */
5896
          tree lref = cp_build_reference_type (TREE_TYPE (type), false);
5897
          result = (perform_direct_initialization_if_possible
5898
                    (lref, expr, c_cast_p, complain));
5899
          result = cp_fold_convert (type, result);
5900
          /* Make sure we don't fold back down to a named rvalue reference,
5901
             because that would be an lvalue.  */
5902
          if (DECL_P (result))
5903
            result = build1 (NON_LVALUE_EXPR, type, result);
5904
          return convert_from_reference (result);
5905
        }
5906
      else
5907
        /* For a bit-field or packed field, bind to a temporary.  */
5908
        expr = rvalue (expr);
5909
    }
5910
 
5911
  /* Resolve overloaded address here rather than once in
5912
     implicit_conversion and again in the inverse code below.  */
5913
  if (TYPE_PTRMEMFUNC_P (type) && type_unknown_p (expr))
5914
    {
5915
      expr = instantiate_type (type, expr, complain);
5916
      intype = TREE_TYPE (expr);
5917
    }
5918
 
5919
  /* [expr.static.cast]
5920
 
5921
     An expression e can be explicitly converted to a type T using a
5922
     static_cast of the form static_cast<T>(e) if the declaration T
5923
     t(e);" is well-formed, for some invented temporary variable
5924
     t.  */
5925
  result = perform_direct_initialization_if_possible (type, expr,
5926
                                                      c_cast_p, complain);
5927
  if (result)
5928
    {
5929
      result = convert_from_reference (result);
5930
 
5931
      /* [expr.static.cast]
5932
 
5933
         If T is a reference type, the result is an lvalue; otherwise,
5934
         the result is an rvalue.  */
5935
      if (TREE_CODE (type) != REFERENCE_TYPE)
5936
        result = rvalue (result);
5937
      return result;
5938
    }
5939
 
5940
  /* [expr.static.cast]
5941
 
5942
     Any expression can be explicitly converted to type cv void.  */
5943
  if (TREE_CODE (type) == VOID_TYPE)
5944
    return convert_to_void (expr, ICV_CAST, complain);
5945
 
5946
  /* [expr.static.cast]
5947
 
5948
     The inverse of any standard conversion sequence (clause _conv_),
5949
     other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
5950
     (_conv.array_), function-to-pointer (_conv.func_), and boolean
5951
     (_conv.bool_) conversions, can be performed explicitly using
5952
     static_cast subject to the restriction that the explicit
5953
     conversion does not cast away constness (_expr.const.cast_), and
5954
     the following additional rules for specific cases:  */
5955
  /* For reference, the conversions not excluded are: integral
5956
     promotions, floating point promotion, integral conversions,
5957
     floating point conversions, floating-integral conversions,
5958
     pointer conversions, and pointer to member conversions.  */
5959
  /* DR 128
5960
 
5961
     A value of integral _or enumeration_ type can be explicitly
5962
     converted to an enumeration type.  */
5963
  /* The effect of all that is that any conversion between any two
5964
     types which are integral, floating, or enumeration types can be
5965
     performed.  */
5966
  if ((INTEGRAL_OR_ENUMERATION_TYPE_P (type)
5967
       || SCALAR_FLOAT_TYPE_P (type))
5968
      && (INTEGRAL_OR_ENUMERATION_TYPE_P (intype)
5969
          || SCALAR_FLOAT_TYPE_P (intype)))
5970
    return ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
5971
 
5972
  if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
5973
      && CLASS_TYPE_P (TREE_TYPE (type))
5974
      && CLASS_TYPE_P (TREE_TYPE (intype))
5975
      && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
5976
                                          (TREE_TYPE (intype))),
5977
                      build_pointer_type (TYPE_MAIN_VARIANT
5978
                                          (TREE_TYPE (type)))))
5979
    {
5980
      tree base;
5981
 
5982
      if (!c_cast_p
5983
          && check_for_casting_away_constness (intype, type, STATIC_CAST_EXPR,
5984
                                               complain))
5985
        return error_mark_node;
5986
      base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
5987
                          c_cast_p ? ba_unique : ba_check,
5988
                          NULL);
5989
      expr = build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false,
5990
                              complain);
5991
      return cp_fold_convert(type, expr);
5992
    }
5993
 
5994
  if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5995
      || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5996
    {
5997
      tree c1;
5998
      tree c2;
5999
      tree t1;
6000
      tree t2;
6001
 
6002
      c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
6003
      c2 = TYPE_PTRMEM_CLASS_TYPE (type);
6004
 
6005
      if (TYPE_PTRMEM_P (type))
6006
        {
6007
          t1 = (build_ptrmem_type
6008
                (c1,
6009
                 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
6010
          t2 = (build_ptrmem_type
6011
                (c2,
6012
                 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
6013
        }
6014
      else
6015
        {
6016
          t1 = intype;
6017
          t2 = type;
6018
        }
6019
      if (can_convert (t1, t2) || can_convert (t2, t1))
6020
        {
6021
          if (!c_cast_p
6022
              && check_for_casting_away_constness (intype, type,
6023
                                                   STATIC_CAST_EXPR,
6024
                                                   complain))
6025
            return error_mark_node;
6026
          return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
6027
                                 c_cast_p, complain);
6028
        }
6029
    }
6030
 
6031
  /* [expr.static.cast]
6032
 
6033
     An rvalue of type "pointer to cv void" can be explicitly
6034
     converted to a pointer to object type.  A value of type pointer
6035
     to object converted to "pointer to cv void" and back to the
6036
     original pointer type will have its original value.  */
6037
  if (TREE_CODE (intype) == POINTER_TYPE
6038
      && VOID_TYPE_P (TREE_TYPE (intype))
6039
      && TYPE_PTROB_P (type))
6040
    {
6041
      if (!c_cast_p
6042
          && check_for_casting_away_constness (intype, type, STATIC_CAST_EXPR,
6043
                                               complain))
6044
        return error_mark_node;
6045
      return build_nop (type, expr);
6046
    }
6047
 
6048
  *valid_p = false;
6049
  return error_mark_node;
6050
}
6051
 
6052
/* Return an expression representing static_cast<TYPE>(EXPR).  */
6053
 
6054
tree
6055
build_static_cast (tree type, tree expr, tsubst_flags_t complain)
6056
{
6057
  tree result;
6058
  bool valid_p;
6059
 
6060
  if (type == error_mark_node || expr == error_mark_node)
6061
    return error_mark_node;
6062
 
6063
  if (processing_template_decl)
6064
    {
6065
      expr = build_min (STATIC_CAST_EXPR, type, expr);
6066
      /* We don't know if it will or will not have side effects.  */
6067
      TREE_SIDE_EFFECTS (expr) = 1;
6068
      return convert_from_reference (expr);
6069
    }
6070
 
6071
  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6072
     Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
6073
  if (TREE_CODE (type) != REFERENCE_TYPE
6074
      && TREE_CODE (expr) == NOP_EXPR
6075
      && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
6076
    expr = TREE_OPERAND (expr, 0);
6077
 
6078
  result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p,
6079
                                complain);
6080
  if (valid_p)
6081
    return result;
6082
 
6083
  if (complain & tf_error)
6084
    error ("invalid static_cast from type %qT to type %qT",
6085
           TREE_TYPE (expr), type);
6086
  return error_mark_node;
6087
}
6088
 
6089
/* EXPR is an expression with member function or pointer-to-member
6090
   function type.  TYPE is a pointer type.  Converting EXPR to TYPE is
6091
   not permitted by ISO C++, but we accept it in some modes.  If we
6092
   are not in one of those modes, issue a diagnostic.  Return the
6093
   converted expression.  */
6094
 
6095
tree
6096
convert_member_func_to_ptr (tree type, tree expr)
6097
{
6098
  tree intype;
6099
  tree decl;
6100
 
6101
  intype = TREE_TYPE (expr);
6102
  gcc_assert (TYPE_PTRMEMFUNC_P (intype)
6103
              || TREE_CODE (intype) == METHOD_TYPE);
6104
 
6105
  if (pedantic || warn_pmf2ptr)
6106
    pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpmf_conversions,
6107
             "converting from %qT to %qT", intype, type);
6108
 
6109
  if (TREE_CODE (intype) == METHOD_TYPE)
6110
    expr = build_addr_func (expr);
6111
  else if (TREE_CODE (expr) == PTRMEM_CST)
6112
    expr = build_address (PTRMEM_CST_MEMBER (expr));
6113
  else
6114
    {
6115
      decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
6116
      decl = build_address (decl);
6117
      expr = get_member_function_from_ptrfunc (&decl, expr);
6118
    }
6119
 
6120
  return build_nop (type, expr);
6121
}
6122
 
6123
/* Return a representation for a reinterpret_cast from EXPR to TYPE.
6124
   If C_CAST_P is true, this reinterpret cast is being done as part of
6125
   a C-style cast.  If VALID_P is non-NULL, *VALID_P is set to
6126
   indicate whether or not reinterpret_cast was valid.  */
6127
 
6128
static tree
6129
build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
6130
                          bool *valid_p, tsubst_flags_t complain)
6131
{
6132
  tree intype;
6133
 
6134
  /* Assume the cast is invalid.  */
6135
  if (valid_p)
6136
    *valid_p = true;
6137
 
6138
  if (type == error_mark_node || error_operand_p (expr))
6139
    return error_mark_node;
6140
 
6141
  intype = TREE_TYPE (expr);
6142
 
6143
  /* Save casted types in the function's used types hash table.  */
6144
  used_types_insert (type);
6145
 
6146
  /* [expr.reinterpret.cast]
6147
     An lvalue expression of type T1 can be cast to the type
6148
     "reference to T2" if an expression of type "pointer to T1" can be
6149
     explicitly converted to the type "pointer to T2" using a
6150
     reinterpret_cast.  */
6151
  if (TREE_CODE (type) == REFERENCE_TYPE)
6152
    {
6153
      if (! real_lvalue_p (expr))
6154
        {
6155
          if (complain & tf_error)
6156
            error ("invalid cast of an rvalue expression of type "
6157
                   "%qT to type %qT",
6158
                   intype, type);
6159
          return error_mark_node;
6160
        }
6161
 
6162
      /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
6163
         "B" are related class types; the reinterpret_cast does not
6164
         adjust the pointer.  */
6165
      if (TYPE_PTR_P (intype)
6166
          && (complain & tf_warning)
6167
          && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
6168
                         COMPARE_BASE | COMPARE_DERIVED)))
6169
        warning (0, "casting %qT to %qT does not dereference pointer",
6170
                 intype, type);
6171
 
6172
      expr = cp_build_addr_expr (expr, complain);
6173
 
6174
      if (warn_strict_aliasing > 2)
6175
        strict_aliasing_warning (TREE_TYPE (expr), type, expr);
6176
 
6177
      if (expr != error_mark_node)
6178
        expr = build_reinterpret_cast_1
6179
          (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
6180
           valid_p, complain);
6181
      if (expr != error_mark_node)
6182
        /* cp_build_indirect_ref isn't right for rvalue refs.  */
6183
        expr = convert_from_reference (fold_convert (type, expr));
6184
      return expr;
6185
    }
6186
 
6187
  /* As a G++ extension, we consider conversions from member
6188
     functions, and pointers to member functions to
6189
     pointer-to-function and pointer-to-void types.  If
6190
     -Wno-pmf-conversions has not been specified,
6191
     convert_member_func_to_ptr will issue an error message.  */
6192
  if ((TYPE_PTRMEMFUNC_P (intype)
6193
       || TREE_CODE (intype) == METHOD_TYPE)
6194
      && TYPE_PTR_P (type)
6195
      && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
6196
          || VOID_TYPE_P (TREE_TYPE (type))))
6197
    return convert_member_func_to_ptr (type, expr);
6198
 
6199
  /* If the cast is not to a reference type, the lvalue-to-rvalue,
6200
     array-to-pointer, and function-to-pointer conversions are
6201
     performed.  */
6202
  expr = decay_conversion (expr);
6203
 
6204
  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6205
     Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
6206
  if (TREE_CODE (expr) == NOP_EXPR
6207
      && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
6208
    expr = TREE_OPERAND (expr, 0);
6209
 
6210
  if (error_operand_p (expr))
6211
    return error_mark_node;
6212
 
6213
  intype = TREE_TYPE (expr);
6214
 
6215
  /* [expr.reinterpret.cast]
6216
     A pointer can be converted to any integral type large enough to
6217
     hold it. ... A value of type std::nullptr_t can be converted to
6218
     an integral type; the conversion has the same meaning and
6219
     validity as a conversion of (void*)0 to the integral type.  */
6220
  if (CP_INTEGRAL_TYPE_P (type)
6221
      && (TYPE_PTR_P (intype) || NULLPTR_TYPE_P (intype)))
6222
    {
6223
      if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
6224
        {
6225
          if (complain & tf_error)
6226
            permerror (input_location, "cast from %qT to %qT loses precision",
6227
                       intype, type);
6228
          else
6229
            return error_mark_node;
6230
        }
6231
      if (NULLPTR_TYPE_P (intype))
6232
        return build_int_cst (type, 0);
6233
    }
6234
  /* [expr.reinterpret.cast]
6235
     A value of integral or enumeration type can be explicitly
6236
     converted to a pointer.  */
6237
  else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
6238
    /* OK */
6239
    ;
6240
  else if ((INTEGRAL_OR_ENUMERATION_TYPE_P (type)
6241
            || TYPE_PTR_P (type) || TYPE_PTR_TO_MEMBER_P (type))
6242
           && same_type_p (type, intype))
6243
    /* DR 799 */
6244
    return fold_if_not_in_template (build_nop (type, expr));
6245
  else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
6246
           || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
6247
    return fold_if_not_in_template (build_nop (type, expr));
6248
  else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
6249
           || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
6250
    {
6251
      tree sexpr = expr;
6252
 
6253
      if (!c_cast_p
6254
          && check_for_casting_away_constness (intype, type,
6255
                                               REINTERPRET_CAST_EXPR,
6256
                                               complain))
6257
        return error_mark_node;
6258
      /* Warn about possible alignment problems.  */
6259
      if (STRICT_ALIGNMENT && warn_cast_align
6260
          && (complain & tf_warning)
6261
          && !VOID_TYPE_P (type)
6262
          && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
6263
          && COMPLETE_TYPE_P (TREE_TYPE (type))
6264
          && COMPLETE_TYPE_P (TREE_TYPE (intype))
6265
          && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
6266
        warning (OPT_Wcast_align, "cast from %qT to %qT "
6267
                 "increases required alignment of target type", intype, type);
6268
 
6269
      /* We need to strip nops here, because the front end likes to
6270
         create (int *)&a for array-to-pointer decay, instead of &a[0].  */
6271
      STRIP_NOPS (sexpr);
6272
      if (warn_strict_aliasing <= 2)
6273
        strict_aliasing_warning (intype, type, sexpr);
6274
 
6275
      return fold_if_not_in_template (build_nop (type, expr));
6276
    }
6277
  else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
6278
           || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
6279
    {
6280
      if (pedantic && (complain & tf_warning))
6281
        /* Only issue a warning, as we have always supported this
6282
           where possible, and it is necessary in some cases.  DR 195
6283
           addresses this issue, but as of 2004/10/26 is still in
6284
           drafting.  */
6285
        warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
6286
      return fold_if_not_in_template (build_nop (type, expr));
6287
    }
6288
  else if (TREE_CODE (type) == VECTOR_TYPE)
6289
    return fold_if_not_in_template (convert_to_vector (type, expr));
6290
  else if (TREE_CODE (intype) == VECTOR_TYPE
6291
           && INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6292
    return fold_if_not_in_template (convert_to_integer (type, expr));
6293
  else
6294
    {
6295
      if (valid_p)
6296
        *valid_p = false;
6297
      if (complain & tf_error)
6298
        error ("invalid cast from type %qT to type %qT", intype, type);
6299
      return error_mark_node;
6300
    }
6301
 
6302
  return cp_convert (type, expr);
6303
}
6304
 
6305
tree
6306
build_reinterpret_cast (tree type, tree expr, tsubst_flags_t complain)
6307
{
6308
  if (type == error_mark_node || expr == error_mark_node)
6309
    return error_mark_node;
6310
 
6311
  if (processing_template_decl)
6312
    {
6313
      tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
6314
 
6315
      if (!TREE_SIDE_EFFECTS (t)
6316
          && type_dependent_expression_p (expr))
6317
        /* There might turn out to be side effects inside expr.  */
6318
        TREE_SIDE_EFFECTS (t) = 1;
6319
      return convert_from_reference (t);
6320
    }
6321
 
6322
  return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
6323
                                   /*valid_p=*/NULL, complain);
6324
}
6325
 
6326
/* Perform a const_cast from EXPR to TYPE.  If the cast is valid,
6327
   return an appropriate expression.  Otherwise, return
6328
   error_mark_node.  If the cast is not valid, and COMPLAIN is true,
6329
   then a diagnostic will be issued.  If VALID_P is non-NULL, we are
6330
   performing a C-style cast, its value upon return will indicate
6331
   whether or not the conversion succeeded.  */
6332
 
6333
static tree
6334
build_const_cast_1 (tree dst_type, tree expr, tsubst_flags_t complain,
6335
                    bool *valid_p)
6336
{
6337
  tree src_type;
6338
  tree reference_type;
6339
 
6340
  /* Callers are responsible for handling error_mark_node as a
6341
     destination type.  */
6342
  gcc_assert (dst_type != error_mark_node);
6343
  /* In a template, callers should be building syntactic
6344
     representations of casts, not using this machinery.  */
6345
  gcc_assert (!processing_template_decl);
6346
 
6347
  /* Assume the conversion is invalid.  */
6348
  if (valid_p)
6349
    *valid_p = false;
6350
 
6351
  if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
6352
    {
6353
      if (complain & tf_error)
6354
        error ("invalid use of const_cast with type %qT, "
6355
               "which is not a pointer, "
6356
               "reference, nor a pointer-to-data-member type", dst_type);
6357
      return error_mark_node;
6358
    }
6359
 
6360
  if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
6361
    {
6362
      if (complain & tf_error)
6363
        error ("invalid use of const_cast with type %qT, which is a pointer "
6364
               "or reference to a function type", dst_type);
6365
      return error_mark_node;
6366
    }
6367
 
6368
  /* Save casted types in the function's used types hash table.  */
6369
  used_types_insert (dst_type);
6370
 
6371
  src_type = TREE_TYPE (expr);
6372
  /* Expressions do not really have reference types.  */
6373
  if (TREE_CODE (src_type) == REFERENCE_TYPE)
6374
    src_type = TREE_TYPE (src_type);
6375
 
6376
  /* [expr.const.cast]
6377
 
6378
     For two object types T1 and T2, if a pointer to T1 can be explicitly
6379
     converted to the type "pointer to T2" using a const_cast, then the
6380
     following conversions can also be made:
6381
 
6382
     -- an lvalue of type T1 can be explicitly converted to an lvalue of
6383
     type T2 using the cast const_cast<T2&>;
6384
 
6385
     -- a glvalue of type T1 can be explicitly converted to an xvalue of
6386
     type T2 using the cast const_cast<T2&&>; and
6387
 
6388
     -- if T1 is a class type, a prvalue of type T1 can be explicitly
6389
     converted to an xvalue of type T2 using the cast const_cast<T2&&>.  */
6390
 
6391
  if (TREE_CODE (dst_type) == REFERENCE_TYPE)
6392
    {
6393
      reference_type = dst_type;
6394
      if (!TYPE_REF_IS_RVALUE (dst_type)
6395
          ? real_lvalue_p (expr)
6396
          : (CLASS_TYPE_P (TREE_TYPE (dst_type))
6397
             ? lvalue_p (expr)
6398
             : lvalue_or_rvalue_with_address_p (expr)))
6399
        /* OK.  */;
6400
      else
6401
        {
6402
          if (complain & tf_error)
6403
            error ("invalid const_cast of an rvalue of type %qT to type %qT",
6404
                   src_type, dst_type);
6405
          return error_mark_node;
6406
        }
6407
      dst_type = build_pointer_type (TREE_TYPE (dst_type));
6408
      src_type = build_pointer_type (src_type);
6409
    }
6410
  else
6411
    {
6412
      reference_type = NULL_TREE;
6413
      /* If the destination type is not a reference type, the
6414
         lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6415
         conversions are performed.  */
6416
      src_type = type_decays_to (src_type);
6417
      if (src_type == error_mark_node)
6418
        return error_mark_node;
6419
    }
6420
 
6421
  if (TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
6422
    {
6423
      if (comp_ptr_ttypes_const (dst_type, src_type))
6424
        {
6425
          if (valid_p)
6426
            {
6427
              *valid_p = true;
6428
              /* This cast is actually a C-style cast.  Issue a warning if
6429
                 the user is making a potentially unsafe cast.  */
6430
              check_for_casting_away_constness (src_type, dst_type,
6431
                                                CAST_EXPR, complain);
6432
            }
6433
          if (reference_type)
6434
            {
6435
              expr = cp_build_addr_expr (expr, complain);
6436
              expr = build_nop (reference_type, expr);
6437
              return convert_from_reference (expr);
6438
            }
6439
          else
6440
            {
6441
              expr = decay_conversion (expr);
6442
              /* build_c_cast puts on a NOP_EXPR to make the result not an
6443
                 lvalue.  Strip such NOP_EXPRs if VALUE is being used in
6444
                 non-lvalue context.  */
6445
              if (TREE_CODE (expr) == NOP_EXPR
6446
                  && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
6447
                expr = TREE_OPERAND (expr, 0);
6448
              return build_nop (dst_type, expr);
6449
            }
6450
        }
6451
      else if (valid_p
6452
               && !at_least_as_qualified_p (TREE_TYPE (dst_type),
6453
                                            TREE_TYPE (src_type)))
6454
        check_for_casting_away_constness (src_type, dst_type, CAST_EXPR,
6455
                                          complain);
6456
    }
6457
 
6458
  if (complain & tf_error)
6459
    error ("invalid const_cast from type %qT to type %qT",
6460
           src_type, dst_type);
6461
  return error_mark_node;
6462
}
6463
 
6464
tree
6465
build_const_cast (tree type, tree expr, tsubst_flags_t complain)
6466
{
6467
  if (type == error_mark_node || error_operand_p (expr))
6468
    return error_mark_node;
6469
 
6470
  if (processing_template_decl)
6471
    {
6472
      tree t = build_min (CONST_CAST_EXPR, type, expr);
6473
 
6474
      if (!TREE_SIDE_EFFECTS (t)
6475
          && type_dependent_expression_p (expr))
6476
        /* There might turn out to be side effects inside expr.  */
6477
        TREE_SIDE_EFFECTS (t) = 1;
6478
      return convert_from_reference (t);
6479
    }
6480
 
6481
  return build_const_cast_1 (type, expr, complain,
6482
                             /*valid_p=*/NULL);
6483
}
6484
 
6485
/* Like cp_build_c_cast, but for the c-common bits.  */
6486
 
6487
tree
6488
build_c_cast (location_t loc ATTRIBUTE_UNUSED, tree type, tree expr)
6489
{
6490
  return cp_build_c_cast (type, expr, tf_warning_or_error);
6491
}
6492
 
6493
/* Build an expression representing an explicit C-style cast to type
6494
   TYPE of expression EXPR.  */
6495
 
6496
tree
6497
cp_build_c_cast (tree type, tree expr, tsubst_flags_t complain)
6498
{
6499
  tree value = expr;
6500
  tree result;
6501
  bool valid_p;
6502
 
6503
  if (type == error_mark_node || error_operand_p (expr))
6504
    return error_mark_node;
6505
 
6506
  if (processing_template_decl)
6507
    {
6508
      tree t = build_min (CAST_EXPR, type,
6509
                          tree_cons (NULL_TREE, value, NULL_TREE));
6510
      /* We don't know if it will or will not have side effects.  */
6511
      TREE_SIDE_EFFECTS (t) = 1;
6512
      return convert_from_reference (t);
6513
    }
6514
 
6515
  /* Casts to a (pointer to a) specific ObjC class (or 'id' or
6516
     'Class') should always be retained, because this information aids
6517
     in method lookup.  */
6518
  if (objc_is_object_ptr (type)
6519
      && objc_is_object_ptr (TREE_TYPE (expr)))
6520
    return build_nop (type, expr);
6521
 
6522
  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6523
     Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
6524
  if (TREE_CODE (type) != REFERENCE_TYPE
6525
      && TREE_CODE (value) == NOP_EXPR
6526
      && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
6527
    value = TREE_OPERAND (value, 0);
6528
 
6529
  if (TREE_CODE (type) == ARRAY_TYPE)
6530
    {
6531
      /* Allow casting from T1* to T2[] because Cfront allows it.
6532
         NIHCL uses it. It is not valid ISO C++ however.  */
6533
      if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
6534
        {
6535
          if (complain & tf_error)
6536
            permerror (input_location, "ISO C++ forbids casting to an array type %qT", type);
6537
          else
6538
            return error_mark_node;
6539
          type = build_pointer_type (TREE_TYPE (type));
6540
        }
6541
      else
6542
        {
6543
          if (complain & tf_error)
6544
            error ("ISO C++ forbids casting to an array type %qT", type);
6545
          return error_mark_node;
6546
        }
6547
    }
6548
 
6549
  if (TREE_CODE (type) == FUNCTION_TYPE
6550
      || TREE_CODE (type) == METHOD_TYPE)
6551
    {
6552
      if (complain & tf_error)
6553
        error ("invalid cast to function type %qT", type);
6554
      return error_mark_node;
6555
    }
6556
 
6557
  if (TREE_CODE (type) == POINTER_TYPE
6558
      && TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
6559
      /* Casting to an integer of smaller size is an error detected elsewhere.  */
6560
      && TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (value))
6561
      /* Don't warn about converting any constant.  */
6562
      && !TREE_CONSTANT (value))
6563
    warning_at (input_location, OPT_Wint_to_pointer_cast,
6564
                "cast to pointer from integer of different size");
6565
 
6566
  /* A C-style cast can be a const_cast.  */
6567
  result = build_const_cast_1 (type, value, complain & tf_warning,
6568
                               &valid_p);
6569
  if (valid_p)
6570
    return result;
6571
 
6572
  /* Or a static cast.  */
6573
  result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
6574
                                &valid_p, complain);
6575
  /* Or a reinterpret_cast.  */
6576
  if (!valid_p)
6577
    result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
6578
                                       &valid_p, complain);
6579
  /* The static_cast or reinterpret_cast may be followed by a
6580
     const_cast.  */
6581
  if (valid_p
6582
      /* A valid cast may result in errors if, for example, a
6583
         conversion to am ambiguous base class is required.  */
6584
      && !error_operand_p (result))
6585
    {
6586
      tree result_type;
6587
 
6588
      /* Non-class rvalues always have cv-unqualified type.  */
6589
      if (!CLASS_TYPE_P (type))
6590
        type = TYPE_MAIN_VARIANT (type);
6591
      result_type = TREE_TYPE (result);
6592
      if (!CLASS_TYPE_P (result_type) && TREE_CODE (type) != REFERENCE_TYPE)
6593
        result_type = TYPE_MAIN_VARIANT (result_type);
6594
      /* If the type of RESULT does not match TYPE, perform a
6595
         const_cast to make it match.  If the static_cast or
6596
         reinterpret_cast succeeded, we will differ by at most
6597
         cv-qualification, so the follow-on const_cast is guaranteed
6598
         to succeed.  */
6599
      if (!same_type_p (non_reference (type), non_reference (result_type)))
6600
        {
6601
          result = build_const_cast_1 (type, result, false, &valid_p);
6602
          gcc_assert (valid_p);
6603
        }
6604
      return result;
6605
    }
6606
 
6607
  return error_mark_node;
6608
}
6609
 
6610
/* For use from the C common bits.  */
6611
tree
6612
build_modify_expr (location_t location ATTRIBUTE_UNUSED,
6613
                   tree lhs, tree lhs_origtype ATTRIBUTE_UNUSED,
6614
                   enum tree_code modifycode,
6615
                   location_t rhs_location ATTRIBUTE_UNUSED, tree rhs,
6616
                   tree rhs_origtype ATTRIBUTE_UNUSED)
6617
{
6618
  return cp_build_modify_expr (lhs, modifycode, rhs, tf_warning_or_error);
6619
}
6620
 
6621
/* Build an assignment expression of lvalue LHS from value RHS.
6622
   MODIFYCODE is the code for a binary operator that we use
6623
   to combine the old value of LHS with RHS to get the new value.
6624
   Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
6625
 
6626
   C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed.  */
6627
 
6628
tree
6629
cp_build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs,
6630
                      tsubst_flags_t complain)
6631
{
6632
  tree result;
6633
  tree newrhs = rhs;
6634
  tree lhstype = TREE_TYPE (lhs);
6635
  tree olhstype = lhstype;
6636
  bool plain_assign = (modifycode == NOP_EXPR);
6637
 
6638
  /* Avoid duplicate error messages from operands that had errors.  */
6639
  if (error_operand_p (lhs) || error_operand_p (rhs))
6640
    return error_mark_node;
6641
 
6642
  /* Handle control structure constructs used as "lvalues".  */
6643
  switch (TREE_CODE (lhs))
6644
    {
6645
      /* Handle --foo = 5; as these are valid constructs in C++.  */
6646
    case PREDECREMENT_EXPR:
6647
    case PREINCREMENT_EXPR:
6648
      if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
6649
        lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
6650
                      stabilize_reference (TREE_OPERAND (lhs, 0)),
6651
                      TREE_OPERAND (lhs, 1));
6652
      newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 0),
6653
                                     modifycode, rhs, complain);
6654
      if (newrhs == error_mark_node)
6655
        return error_mark_node;
6656
      return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
6657
 
6658
      /* Handle (a, b) used as an "lvalue".  */
6659
    case COMPOUND_EXPR:
6660
      newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 1),
6661
                                     modifycode, rhs, complain);
6662
      if (newrhs == error_mark_node)
6663
        return error_mark_node;
6664
      return build2 (COMPOUND_EXPR, lhstype,
6665
                     TREE_OPERAND (lhs, 0), newrhs);
6666
 
6667
    case MODIFY_EXPR:
6668
      if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
6669
        lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
6670
                      stabilize_reference (TREE_OPERAND (lhs, 0)),
6671
                      TREE_OPERAND (lhs, 1));
6672
      newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs,
6673
                                     complain);
6674
      if (newrhs == error_mark_node)
6675
        return error_mark_node;
6676
      return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
6677
 
6678
    case MIN_EXPR:
6679
    case MAX_EXPR:
6680
      /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
6681
         when neither operand has side-effects.  */
6682
      if (!lvalue_or_else (lhs, lv_assign, complain))
6683
        return error_mark_node;
6684
 
6685
      gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
6686
                  && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
6687
 
6688
      lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
6689
                    build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
6690
                            boolean_type_node,
6691
                            TREE_OPERAND (lhs, 0),
6692
                            TREE_OPERAND (lhs, 1)),
6693
                    TREE_OPERAND (lhs, 0),
6694
                    TREE_OPERAND (lhs, 1));
6695
      /* Fall through.  */
6696
 
6697
      /* Handle (a ? b : c) used as an "lvalue".  */
6698
    case COND_EXPR:
6699
      {
6700
        /* Produce (a ? (b = rhs) : (c = rhs))
6701
           except that the RHS goes through a save-expr
6702
           so the code to compute it is only emitted once.  */
6703
        tree cond;
6704
        tree preeval = NULL_TREE;
6705
 
6706
        if (VOID_TYPE_P (TREE_TYPE (rhs)))
6707
          {
6708
            if (complain & tf_error)
6709
              error ("void value not ignored as it ought to be");
6710
            return error_mark_node;
6711
          }
6712
 
6713
        rhs = stabilize_expr (rhs, &preeval);
6714
 
6715
        /* Check this here to avoid odd errors when trying to convert
6716
           a throw to the type of the COND_EXPR.  */
6717
        if (!lvalue_or_else (lhs, lv_assign, complain))
6718
          return error_mark_node;
6719
 
6720
        cond = build_conditional_expr
6721
          (TREE_OPERAND (lhs, 0),
6722
           cp_build_modify_expr (TREE_OPERAND (lhs, 1),
6723
                                 modifycode, rhs, complain),
6724
           cp_build_modify_expr (TREE_OPERAND (lhs, 2),
6725
                                 modifycode, rhs, complain),
6726
           complain);
6727
 
6728
        if (cond == error_mark_node)
6729
          return cond;
6730
        /* Make sure the code to compute the rhs comes out
6731
           before the split.  */
6732
        if (preeval)
6733
          cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
6734
        return cond;
6735
      }
6736
 
6737
    default:
6738
      break;
6739
    }
6740
 
6741
  if (modifycode == INIT_EXPR)
6742
    {
6743
      if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
6744
        /* Do the default thing.  */;
6745
      else if (TREE_CODE (rhs) == CONSTRUCTOR)
6746
        {
6747
          /* Compound literal.  */
6748
          if (! same_type_p (TREE_TYPE (rhs), lhstype))
6749
            /* Call convert to generate an error; see PR 11063.  */
6750
            rhs = convert (lhstype, rhs);
6751
          result = build2 (INIT_EXPR, lhstype, lhs, rhs);
6752
          TREE_SIDE_EFFECTS (result) = 1;
6753
          return result;
6754
        }
6755
      else if (! MAYBE_CLASS_TYPE_P (lhstype))
6756
        /* Do the default thing.  */;
6757
      else
6758
        {
6759
          VEC(tree,gc) *rhs_vec = make_tree_vector_single (rhs);
6760
          result = build_special_member_call (lhs, complete_ctor_identifier,
6761
                                              &rhs_vec, lhstype, LOOKUP_NORMAL,
6762
                                              complain);
6763
          release_tree_vector (rhs_vec);
6764
          if (result == NULL_TREE)
6765
            return error_mark_node;
6766
          return result;
6767
        }
6768
    }
6769
  else
6770
    {
6771
      lhs = require_complete_type_sfinae (lhs, complain);
6772
      if (lhs == error_mark_node)
6773
        return error_mark_node;
6774
 
6775
      if (modifycode == NOP_EXPR)
6776
        {
6777
          if (c_dialect_objc ())
6778
            {
6779
              result = objc_maybe_build_modify_expr (lhs, rhs);
6780
              if (result)
6781
                return result;
6782
            }
6783
 
6784
          /* `operator=' is not an inheritable operator.  */
6785
          if (! MAYBE_CLASS_TYPE_P (lhstype))
6786
            /* Do the default thing.  */;
6787
          else
6788
            {
6789
              result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
6790
                                     lhs, rhs, make_node (NOP_EXPR),
6791
                                     /*overload=*/NULL,
6792
                                     complain);
6793
              if (result == NULL_TREE)
6794
                return error_mark_node;
6795
              return result;
6796
            }
6797
          lhstype = olhstype;
6798
        }
6799
      else
6800
        {
6801
          tree init = NULL_TREE;
6802
 
6803
          /* A binary op has been requested.  Combine the old LHS
6804
             value with the RHS producing the value we should actually
6805
             store into the LHS.  */
6806
          gcc_assert (!((TREE_CODE (lhstype) == REFERENCE_TYPE
6807
                         && MAYBE_CLASS_TYPE_P (TREE_TYPE (lhstype)))
6808
                        || MAYBE_CLASS_TYPE_P (lhstype)));
6809
 
6810
          /* Preevaluate the RHS to make sure its evaluation is complete
6811
             before the lvalue-to-rvalue conversion of the LHS:
6812
 
6813
             [expr.ass] With respect to an indeterminately-sequenced
6814
             function call, the operation of a compound assignment is a
6815
             single evaluation. [ Note: Therefore, a function call shall
6816
             not intervene between the lvalue-to-rvalue conversion and the
6817
             side effect associated with any single compound assignment
6818
             operator. -- end note ]  */
6819
          lhs = stabilize_reference (lhs);
6820
          if (TREE_SIDE_EFFECTS (rhs))
6821
            rhs = mark_rvalue_use (rhs);
6822
          rhs = stabilize_expr (rhs, &init);
6823
          newrhs = cp_build_binary_op (input_location,
6824
                                       modifycode, lhs, rhs,
6825
                                       complain);
6826
          if (newrhs == error_mark_node)
6827
            {
6828
              if (complain & tf_error)
6829
                error ("  in evaluation of %<%Q(%#T, %#T)%>", modifycode,
6830
                       TREE_TYPE (lhs), TREE_TYPE (rhs));
6831
              return error_mark_node;
6832
            }
6833
 
6834
          if (init)
6835
            newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), init, newrhs);
6836
 
6837
          /* Now it looks like a plain assignment.  */
6838
          modifycode = NOP_EXPR;
6839
          if (c_dialect_objc ())
6840
            {
6841
              result = objc_maybe_build_modify_expr (lhs, newrhs);
6842
              if (result)
6843
                return result;
6844
            }
6845
        }
6846
      gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
6847
      gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
6848
    }
6849
 
6850
  /* The left-hand side must be an lvalue.  */
6851
  if (!lvalue_or_else (lhs, lv_assign, complain))
6852
    return error_mark_node;
6853
 
6854
  /* Warn about modifying something that is `const'.  Don't warn if
6855
     this is initialization.  */
6856
  if (modifycode != INIT_EXPR
6857
      && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
6858
          /* Functions are not modifiable, even though they are
6859
             lvalues.  */
6860
          || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
6861
          || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
6862
          /* If it's an aggregate and any field is const, then it is
6863
             effectively const.  */
6864
          || (CLASS_TYPE_P (lhstype)
6865
              && C_TYPE_FIELDS_READONLY (lhstype))))
6866
    {
6867
      if (complain & tf_error)
6868
        cxx_readonly_error (lhs, lv_assign);
6869
      else
6870
        return error_mark_node;
6871
    }
6872
 
6873
  /* If storing into a structure or union member, it may have been given a
6874
     lowered bitfield type.  We need to convert to the declared type first,
6875
     so retrieve it now.  */
6876
 
6877
  olhstype = unlowered_expr_type (lhs);
6878
 
6879
  /* Convert new value to destination type.  */
6880
 
6881
  if (TREE_CODE (lhstype) == ARRAY_TYPE)
6882
    {
6883
      int from_array;
6884
 
6885
      if (BRACE_ENCLOSED_INITIALIZER_P (newrhs))
6886
        {
6887
          if (modifycode != INIT_EXPR)
6888
            {
6889
              if (complain & tf_error)
6890
                error ("assigning to an array from an initializer list");
6891
              return error_mark_node;
6892
            }
6893
          if (check_array_initializer (lhs, lhstype, newrhs))
6894
            return error_mark_node;
6895
          newrhs = digest_init (lhstype, newrhs, complain);
6896
          if (newrhs == error_mark_node)
6897
            return error_mark_node;
6898
        }
6899
 
6900
      else if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
6901
                                     TYPE_MAIN_VARIANT (TREE_TYPE (newrhs))))
6902
        {
6903
          if (complain & tf_error)
6904
            error ("incompatible types in assignment of %qT to %qT",
6905
                   TREE_TYPE (rhs), lhstype);
6906
          return error_mark_node;
6907
        }
6908
 
6909
      /* Allow array assignment in compiler-generated code.  */
6910
      else if (!current_function_decl
6911
               || !DECL_DEFAULTED_FN (current_function_decl))
6912
        {
6913
          /* This routine is used for both initialization and assignment.
6914
             Make sure the diagnostic message differentiates the context.  */
6915
          if (complain & tf_error)
6916
            {
6917
              if (modifycode == INIT_EXPR)
6918
                error ("array used as initializer");
6919
              else
6920
                error ("invalid array assignment");
6921
            }
6922
          return error_mark_node;
6923
        }
6924
 
6925
      from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
6926
                   ? 1 + (modifycode != INIT_EXPR): 0;
6927
      return build_vec_init (lhs, NULL_TREE, newrhs,
6928
                             /*explicit_value_init_p=*/false,
6929
                             from_array, complain);
6930
    }
6931
 
6932
  if (modifycode == INIT_EXPR)
6933
    /* Calls with INIT_EXPR are all direct-initialization, so don't set
6934
       LOOKUP_ONLYCONVERTING.  */
6935
    newrhs = convert_for_initialization (lhs, olhstype, newrhs, LOOKUP_NORMAL,
6936
                                         ICR_INIT, NULL_TREE, 0,
6937
                                         complain);
6938
  else
6939
    newrhs = convert_for_assignment (olhstype, newrhs, ICR_ASSIGN,
6940
                                     NULL_TREE, 0, complain, LOOKUP_IMPLICIT);
6941
 
6942
  if (!same_type_p (lhstype, olhstype))
6943
    newrhs = cp_convert_and_check (lhstype, newrhs);
6944
 
6945
  if (modifycode != INIT_EXPR)
6946
    {
6947
      if (TREE_CODE (newrhs) == CALL_EXPR
6948
          && TYPE_NEEDS_CONSTRUCTING (lhstype))
6949
        newrhs = build_cplus_new (lhstype, newrhs, complain);
6950
 
6951
      /* Can't initialize directly from a TARGET_EXPR, since that would
6952
         cause the lhs to be constructed twice, and possibly result in
6953
         accidental self-initialization.  So we force the TARGET_EXPR to be
6954
         expanded without a target.  */
6955
      if (TREE_CODE (newrhs) == TARGET_EXPR)
6956
        newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
6957
                         TREE_OPERAND (newrhs, 0));
6958
    }
6959
 
6960
  if (newrhs == error_mark_node)
6961
    return error_mark_node;
6962
 
6963
  if (c_dialect_objc () && flag_objc_gc)
6964
    {
6965
      result = objc_generate_write_barrier (lhs, modifycode, newrhs);
6966
 
6967
      if (result)
6968
        return result;
6969
    }
6970
 
6971
  result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
6972
                   lhstype, lhs, newrhs);
6973
 
6974
  TREE_SIDE_EFFECTS (result) = 1;
6975
  if (!plain_assign)
6976
    TREE_NO_WARNING (result) = 1;
6977
 
6978
  return result;
6979
}
6980
 
6981
tree
6982
build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs,
6983
                     tsubst_flags_t complain)
6984
{
6985
  if (processing_template_decl)
6986
    return build_min_nt (MODOP_EXPR, lhs,
6987
                         build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
6988
 
6989
  if (modifycode != NOP_EXPR)
6990
    {
6991
      tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
6992
                                make_node (modifycode),
6993
                                /*overload=*/NULL,
6994
                                complain);
6995
      if (rval)
6996
        {
6997
          TREE_NO_WARNING (rval) = 1;
6998
          return rval;
6999
        }
7000
    }
7001
  return cp_build_modify_expr (lhs, modifycode, rhs, complain);
7002
}
7003
 
7004
/* Helper function for get_delta_difference which assumes FROM is a base
7005
   class of TO.  Returns a delta for the conversion of pointer-to-member
7006
   of FROM to pointer-to-member of TO.  If the conversion is invalid and
7007
   tf_error is not set in COMPLAIN returns error_mark_node, otherwise
7008
   returns zero.  If FROM is not a base class of TO, returns NULL_TREE.
7009
   If C_CAST_P is true, this conversion is taking place as part of a
7010
   C-style cast.  */
7011
 
7012
static tree
7013
get_delta_difference_1 (tree from, tree to, bool c_cast_p,
7014
                        tsubst_flags_t complain)
7015
{
7016
  tree binfo;
7017
  base_kind kind;
7018
  base_access access = c_cast_p ? ba_unique : ba_check;
7019
 
7020
  /* Note: ba_quiet does not distinguish between access control and
7021
     ambiguity.  */
7022
  if (!(complain & tf_error))
7023
    access |= ba_quiet;
7024
 
7025
  binfo = lookup_base (to, from, access, &kind);
7026
 
7027
  if (kind == bk_inaccessible || kind == bk_ambig)
7028
    {
7029
      if (!(complain & tf_error))
7030
        return error_mark_node;
7031
 
7032
      error ("   in pointer to member function conversion");
7033
      return size_zero_node;
7034
    }
7035
  else if (binfo)
7036
    {
7037
      if (kind != bk_via_virtual)
7038
        return BINFO_OFFSET (binfo);
7039
      else
7040
        /* FROM is a virtual base class of TO.  Issue an error or warning
7041
           depending on whether or not this is a reinterpret cast.  */
7042
        {
7043
          if (!(complain & tf_error))
7044
            return error_mark_node;
7045
 
7046
          error ("pointer to member conversion via virtual base %qT",
7047
                 BINFO_TYPE (binfo_from_vbase (binfo)));
7048
 
7049
          return size_zero_node;
7050
        }
7051
      }
7052
  else
7053
    return NULL_TREE;
7054
}
7055
 
7056
/* Get difference in deltas for different pointer to member function
7057
   types.  If the conversion is invalid and tf_error is not set in
7058
   COMPLAIN, returns error_mark_node, otherwise returns an integer
7059
   constant of type PTRDIFF_TYPE_NODE and its value is zero if the
7060
   conversion is invalid.  If ALLOW_INVERSE_P is true, then allow reverse
7061
   conversions as well.  If C_CAST_P is true this conversion is taking
7062
   place as part of a C-style cast.
7063
 
7064
   Note that the naming of FROM and TO is kind of backwards; the return
7065
   value is what we add to a TO in order to get a FROM.  They are named
7066
   this way because we call this function to find out how to convert from
7067
   a pointer to member of FROM to a pointer to member of TO.  */
7068
 
7069
static tree
7070
get_delta_difference (tree from, tree to,
7071
                      bool allow_inverse_p,
7072
                      bool c_cast_p, tsubst_flags_t complain)
7073
{
7074
  tree result;
7075
 
7076
  if (same_type_ignoring_top_level_qualifiers_p (from, to))
7077
    /* Pointer to member of incomplete class is permitted*/
7078
    result = size_zero_node;
7079
  else
7080
    result = get_delta_difference_1 (from, to, c_cast_p, complain);
7081
 
7082
  if (result == error_mark_node)
7083
    return error_mark_node;
7084
 
7085
  if (!result)
7086
  {
7087
    if (!allow_inverse_p)
7088
      {
7089
        if (!(complain & tf_error))
7090
          return error_mark_node;
7091
 
7092
        error_not_base_type (from, to);
7093
        error ("   in pointer to member conversion");
7094
        result = size_zero_node;
7095
      }
7096
    else
7097
      {
7098
        result = get_delta_difference_1 (to, from, c_cast_p, complain);
7099
 
7100
        if (result == error_mark_node)
7101
          return error_mark_node;
7102
 
7103
        if (result)
7104
          result = size_diffop_loc (input_location,
7105
                                    size_zero_node, result);
7106
        else
7107
          {
7108
            if (!(complain & tf_error))
7109
              return error_mark_node;
7110
 
7111
            error_not_base_type (from, to);
7112
            error ("   in pointer to member conversion");
7113
            result = size_zero_node;
7114
          }
7115
      }
7116
  }
7117
 
7118
  return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
7119
                                                      result));
7120
}
7121
 
7122
/* Return a constructor for the pointer-to-member-function TYPE using
7123
   the other components as specified.  */
7124
 
7125
tree
7126
build_ptrmemfunc1 (tree type, tree delta, tree pfn)
7127
{
7128
  tree u = NULL_TREE;
7129
  tree delta_field;
7130
  tree pfn_field;
7131
  VEC(constructor_elt, gc) *v;
7132
 
7133
  /* Pull the FIELD_DECLs out of the type.  */
7134
  pfn_field = TYPE_FIELDS (type);
7135
  delta_field = DECL_CHAIN (pfn_field);
7136
 
7137
  /* Make sure DELTA has the type we want.  */
7138
  delta = convert_and_check (delta_type_node, delta);
7139
 
7140
  /* Convert to the correct target type if necessary.  */
7141
  pfn = fold_convert (TREE_TYPE (pfn_field), pfn);
7142
 
7143
  /* Finish creating the initializer.  */
7144
  v = VEC_alloc(constructor_elt, gc, 2);
7145
  CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
7146
  CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
7147
  u = build_constructor (type, v);
7148
  TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
7149
  TREE_STATIC (u) = (TREE_CONSTANT (u)
7150
                     && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
7151
                         != NULL_TREE)
7152
                     && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
7153
                         != NULL_TREE));
7154
  return u;
7155
}
7156
 
7157
/* Build a constructor for a pointer to member function.  It can be
7158
   used to initialize global variables, local variable, or used
7159
   as a value in expressions.  TYPE is the POINTER to METHOD_TYPE we
7160
   want to be.
7161
 
7162
   If FORCE is nonzero, then force this conversion, even if
7163
   we would rather not do it.  Usually set when using an explicit
7164
   cast.  A C-style cast is being processed iff C_CAST_P is true.
7165
 
7166
   Return error_mark_node, if something goes wrong.  */
7167
 
7168
tree
7169
build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p,
7170
                  tsubst_flags_t complain)
7171
{
7172
  tree fn;
7173
  tree pfn_type;
7174
  tree to_type;
7175
 
7176
  if (error_operand_p (pfn))
7177
    return error_mark_node;
7178
 
7179
  pfn_type = TREE_TYPE (pfn);
7180
  to_type = build_ptrmemfunc_type (type);
7181
 
7182
  /* Handle multiple conversions of pointer to member functions.  */
7183
  if (TYPE_PTRMEMFUNC_P (pfn_type))
7184
    {
7185
      tree delta = NULL_TREE;
7186
      tree npfn = NULL_TREE;
7187
      tree n;
7188
 
7189
      if (!force
7190
          && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL))
7191
        error ("invalid conversion to type %qT from type %qT",
7192
               to_type, pfn_type);
7193
 
7194
      n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
7195
                                TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
7196
                                force,
7197
                                c_cast_p, complain);
7198
      if (n == error_mark_node)
7199
        return error_mark_node;
7200
 
7201
      /* We don't have to do any conversion to convert a
7202
         pointer-to-member to its own type.  But, we don't want to
7203
         just return a PTRMEM_CST if there's an explicit cast; that
7204
         cast should make the expression an invalid template argument.  */
7205
      if (TREE_CODE (pfn) != PTRMEM_CST)
7206
        {
7207
          if (same_type_p (to_type, pfn_type))
7208
            return pfn;
7209
          else if (integer_zerop (n))
7210
            return build_reinterpret_cast (to_type, pfn,
7211
                                           tf_warning_or_error);
7212
        }
7213
 
7214
      if (TREE_SIDE_EFFECTS (pfn))
7215
        pfn = save_expr (pfn);
7216
 
7217
      /* Obtain the function pointer and the current DELTA.  */
7218
      if (TREE_CODE (pfn) == PTRMEM_CST)
7219
        expand_ptrmemfunc_cst (pfn, &delta, &npfn);
7220
      else
7221
        {
7222
          npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
7223
          delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
7224
        }
7225
 
7226
      /* Just adjust the DELTA field.  */
7227
      gcc_assert  (same_type_ignoring_top_level_qualifiers_p
7228
                   (TREE_TYPE (delta), ptrdiff_type_node));
7229
      if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
7230
        n = cp_build_binary_op (input_location,
7231
                                LSHIFT_EXPR, n, integer_one_node,
7232
                                tf_warning_or_error);
7233
      delta = cp_build_binary_op (input_location,
7234
                                  PLUS_EXPR, delta, n, tf_warning_or_error);
7235
      return build_ptrmemfunc1 (to_type, delta, npfn);
7236
    }
7237
 
7238
  /* Handle null pointer to member function conversions.  */
7239
  if (null_ptr_cst_p (pfn))
7240
    {
7241
      pfn = build_c_cast (input_location, type, nullptr_node);
7242
      return build_ptrmemfunc1 (to_type,
7243
                                integer_zero_node,
7244
                                pfn);
7245
    }
7246
 
7247
  if (type_unknown_p (pfn))
7248
    return instantiate_type (type, pfn, tf_warning_or_error);
7249
 
7250
  fn = TREE_OPERAND (pfn, 0);
7251
  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
7252
              /* In a template, we will have preserved the
7253
                 OFFSET_REF.  */
7254
              || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
7255
  return make_ptrmem_cst (to_type, fn);
7256
}
7257
 
7258
/* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
7259
   given by CST.
7260
 
7261
   ??? There is no consistency as to the types returned for the above
7262
   values.  Some code acts as if it were a sizetype and some as if it were
7263
   integer_type_node.  */
7264
 
7265
void
7266
expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
7267
{
7268
  tree type = TREE_TYPE (cst);
7269
  tree fn = PTRMEM_CST_MEMBER (cst);
7270
  tree ptr_class, fn_class;
7271
 
7272
  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7273
 
7274
  /* The class that the function belongs to.  */
7275
  fn_class = DECL_CONTEXT (fn);
7276
 
7277
  /* The class that we're creating a pointer to member of.  */
7278
  ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
7279
 
7280
  /* First, calculate the adjustment to the function's class.  */
7281
  *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
7282
                                 /*c_cast_p=*/0, tf_warning_or_error);
7283
 
7284
  if (!DECL_VIRTUAL_P (fn))
7285
    *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
7286
  else
7287
    {
7288
      /* If we're dealing with a virtual function, we have to adjust 'this'
7289
         again, to point to the base which provides the vtable entry for
7290
         fn; the call will do the opposite adjustment.  */
7291
      tree orig_class = DECL_CONTEXT (fn);
7292
      tree binfo = binfo_or_else (orig_class, fn_class);
7293
      *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
7294
                       *delta, BINFO_OFFSET (binfo));
7295
      *delta = fold_if_not_in_template (*delta);
7296
 
7297
      /* We set PFN to the vtable offset at which the function can be
7298
         found, plus one (unless ptrmemfunc_vbit_in_delta, in which
7299
         case delta is shifted left, and then incremented).  */
7300
      *pfn = DECL_VINDEX (fn);
7301
      *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
7302
                     TYPE_SIZE_UNIT (vtable_entry_type));
7303
      *pfn = fold_if_not_in_template (*pfn);
7304
 
7305
      switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
7306
        {
7307
        case ptrmemfunc_vbit_in_pfn:
7308
          *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
7309
                         integer_one_node);
7310
          *pfn = fold_if_not_in_template (*pfn);
7311
          break;
7312
 
7313
        case ptrmemfunc_vbit_in_delta:
7314
          *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
7315
                           *delta, integer_one_node);
7316
          *delta = fold_if_not_in_template (*delta);
7317
          *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
7318
                           *delta, integer_one_node);
7319
          *delta = fold_if_not_in_template (*delta);
7320
          break;
7321
 
7322
        default:
7323
          gcc_unreachable ();
7324
        }
7325
 
7326
      *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
7327
      *pfn = fold_if_not_in_template (*pfn);
7328
    }
7329
}
7330
 
7331
/* Return an expression for PFN from the pointer-to-member function
7332
   given by T.  */
7333
 
7334
static tree
7335
pfn_from_ptrmemfunc (tree t)
7336
{
7337
  if (TREE_CODE (t) == PTRMEM_CST)
7338
    {
7339
      tree delta;
7340
      tree pfn;
7341
 
7342
      expand_ptrmemfunc_cst (t, &delta, &pfn);
7343
      if (pfn)
7344
        return pfn;
7345
    }
7346
 
7347
  return build_ptrmemfunc_access_expr (t, pfn_identifier);
7348
}
7349
 
7350
/* Return an expression for DELTA from the pointer-to-member function
7351
   given by T.  */
7352
 
7353
static tree
7354
delta_from_ptrmemfunc (tree t)
7355
{
7356
  if (TREE_CODE (t) == PTRMEM_CST)
7357
    {
7358
      tree delta;
7359
      tree pfn;
7360
 
7361
      expand_ptrmemfunc_cst (t, &delta, &pfn);
7362
      if (delta)
7363
        return delta;
7364
    }
7365
 
7366
  return build_ptrmemfunc_access_expr (t, delta_identifier);
7367
}
7368
 
7369
/* Convert value RHS to type TYPE as preparation for an assignment to
7370
   an lvalue of type TYPE.  ERRTYPE indicates what kind of error the
7371
   implicit conversion is.  If FNDECL is non-NULL, we are doing the
7372
   conversion in order to pass the PARMNUMth argument of FNDECL.
7373
   If FNDECL is NULL, we are doing the conversion in function pointer
7374
   argument passing, conversion in initialization, etc. */
7375
 
7376
static tree
7377
convert_for_assignment (tree type, tree rhs,
7378
                        impl_conv_rhs errtype, tree fndecl, int parmnum,
7379
                        tsubst_flags_t complain, int flags)
7380
{
7381
  tree rhstype;
7382
  enum tree_code coder;
7383
 
7384
  /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
7385
  if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
7386
    rhs = TREE_OPERAND (rhs, 0);
7387
 
7388
  rhstype = TREE_TYPE (rhs);
7389
  coder = TREE_CODE (rhstype);
7390
 
7391
  if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
7392
      && vector_types_convertible_p (type, rhstype, true))
7393
    {
7394
      rhs = mark_rvalue_use (rhs);
7395
      return convert (type, rhs);
7396
    }
7397
 
7398
  if (rhs == error_mark_node || rhstype == error_mark_node)
7399
    return error_mark_node;
7400
  if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
7401
    return error_mark_node;
7402
 
7403
  /* The RHS of an assignment cannot have void type.  */
7404
  if (coder == VOID_TYPE)
7405
    {
7406
      if (complain & tf_error)
7407
        error ("void value not ignored as it ought to be");
7408
      return error_mark_node;
7409
    }
7410
 
7411
  /* Simplify the RHS if possible.  */
7412
  if (TREE_CODE (rhs) == CONST_DECL)
7413
    rhs = DECL_INITIAL (rhs);
7414
 
7415
  if (c_dialect_objc ())
7416
    {
7417
      int parmno;
7418
      tree selector;
7419
      tree rname = fndecl;
7420
 
7421
      switch (errtype)
7422
        {
7423
          case ICR_ASSIGN:
7424
            parmno = -1;
7425
            break;
7426
          case ICR_INIT:
7427
            parmno = -2;
7428
            break;
7429
          default:
7430
            selector = objc_message_selector ();
7431
            parmno = parmnum;
7432
            if (selector && parmno > 1)
7433
              {
7434
                rname = selector;
7435
                parmno -= 1;
7436
              }
7437
        }
7438
 
7439
      if (objc_compare_types (type, rhstype, parmno, rname))
7440
        {
7441
          rhs = mark_rvalue_use (rhs);
7442
          return convert (type, rhs);
7443
        }
7444
    }
7445
 
7446
  /* [expr.ass]
7447
 
7448
     The expression is implicitly converted (clause _conv_) to the
7449
     cv-unqualified type of the left operand.
7450
 
7451
     We allow bad conversions here because by the time we get to this point
7452
     we are committed to doing the conversion.  If we end up doing a bad
7453
     conversion, convert_like will complain.  */
7454
  if (!can_convert_arg_bad (type, rhstype, rhs, flags))
7455
    {
7456
      /* When -Wno-pmf-conversions is use, we just silently allow
7457
         conversions from pointers-to-members to plain pointers.  If
7458
         the conversion doesn't work, cp_convert will complain.  */
7459
      if (!warn_pmf2ptr
7460
          && TYPE_PTR_P (type)
7461
          && TYPE_PTRMEMFUNC_P (rhstype))
7462
        rhs = cp_convert (strip_top_quals (type), rhs);
7463
      else
7464
        {
7465
          if (complain & tf_error)
7466
            {
7467
              /* If the right-hand side has unknown type, then it is an
7468
                 overloaded function.  Call instantiate_type to get error
7469
                 messages.  */
7470
              if (rhstype == unknown_type_node)
7471
                instantiate_type (type, rhs, tf_warning_or_error);
7472
              else if (fndecl)
7473
                error ("cannot convert %qT to %qT for argument %qP to %qD",
7474
                       rhstype, type, parmnum, fndecl);
7475
              else
7476
                switch (errtype)
7477
                  {
7478
                    case ICR_DEFAULT_ARGUMENT:
7479
                      error ("cannot convert %qT to %qT in default argument",
7480
                             rhstype, type);
7481
                      break;
7482
                    case ICR_ARGPASS:
7483
                      error ("cannot convert %qT to %qT in argument passing",
7484
                             rhstype, type);
7485
                      break;
7486
                    case ICR_CONVERTING:
7487
                      error ("cannot convert %qT to %qT",
7488
                             rhstype, type);
7489
                      break;
7490
                    case ICR_INIT:
7491
                      error ("cannot convert %qT to %qT in initialization",
7492
                             rhstype, type);
7493
                      break;
7494
                    case ICR_RETURN:
7495
                      error ("cannot convert %qT to %qT in return",
7496
                             rhstype, type);
7497
                      break;
7498
                    case ICR_ASSIGN:
7499
                      error ("cannot convert %qT to %qT in assignment",
7500
                             rhstype, type);
7501
                      break;
7502
                    default:
7503
                      gcc_unreachable();
7504
                  }
7505
            }
7506
          return error_mark_node;
7507
        }
7508
    }
7509
  if (warn_missing_format_attribute)
7510
    {
7511
      const enum tree_code codel = TREE_CODE (type);
7512
      if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
7513
          && coder == codel
7514
          && check_missing_format_attribute (type, rhstype)
7515
          && (complain & tf_warning))
7516
        switch (errtype)
7517
          {
7518
            case ICR_ARGPASS:
7519
            case ICR_DEFAULT_ARGUMENT:
7520
              if (fndecl)
7521
                warning (OPT_Wmissing_format_attribute,
7522
                         "parameter %qP of %qD might be a candidate "
7523
                         "for a format attribute", parmnum, fndecl);
7524
              else
7525
                warning (OPT_Wmissing_format_attribute,
7526
                         "parameter might be a candidate "
7527
                         "for a format attribute");
7528
              break;
7529
            case ICR_CONVERTING:
7530
              warning (OPT_Wmissing_format_attribute,
7531
                       "target of conversion might be a candidate "
7532
                       "for a format attribute");
7533
              break;
7534
            case ICR_INIT:
7535
              warning (OPT_Wmissing_format_attribute,
7536
                       "target of initialization might be a candidate "
7537
                       "for a format attribute");
7538
              break;
7539
            case ICR_RETURN:
7540
              warning (OPT_Wmissing_format_attribute,
7541
                       "return type might be a candidate "
7542
                       "for a format attribute");
7543
              break;
7544
            case ICR_ASSIGN:
7545
              warning (OPT_Wmissing_format_attribute,
7546
                       "left-hand side of assignment might be a candidate "
7547
                       "for a format attribute");
7548
              break;
7549
            default:
7550
              gcc_unreachable();
7551
          }
7552
    }
7553
 
7554
  /* If -Wparentheses, warn about a = b = c when a has type bool and b
7555
     does not.  */
7556
  if (warn_parentheses
7557
      && TREE_CODE (type) == BOOLEAN_TYPE
7558
      && TREE_CODE (rhs) == MODIFY_EXPR
7559
      && !TREE_NO_WARNING (rhs)
7560
      && TREE_CODE (TREE_TYPE (rhs)) != BOOLEAN_TYPE
7561
      && (complain & tf_warning))
7562
    {
7563
      location_t loc = EXPR_LOC_OR_HERE (rhs);
7564
 
7565
      warning_at (loc, OPT_Wparentheses,
7566
                  "suggest parentheses around assignment used as truth value");
7567
      TREE_NO_WARNING (rhs) = 1;
7568
    }
7569
 
7570
  return perform_implicit_conversion_flags (strip_top_quals (type), rhs,
7571
                                            complain, flags);
7572
}
7573
 
7574
/* Convert RHS to be of type TYPE.
7575
   If EXP is nonzero, it is the target of the initialization.
7576
   ERRTYPE indicates what kind of error the implicit conversion is.
7577
 
7578
   Two major differences between the behavior of
7579
   `convert_for_assignment' and `convert_for_initialization'
7580
   are that references are bashed in the former, while
7581
   copied in the latter, and aggregates are assigned in
7582
   the former (operator=) while initialized in the
7583
   latter (X(X&)).
7584
 
7585
   If using constructor make sure no conversion operator exists, if one does
7586
   exist, an ambiguity exists.
7587
 
7588
   If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything.  */
7589
 
7590
tree
7591
convert_for_initialization (tree exp, tree type, tree rhs, int flags,
7592
                            impl_conv_rhs errtype, tree fndecl, int parmnum,
7593
                            tsubst_flags_t complain)
7594
{
7595
  enum tree_code codel = TREE_CODE (type);
7596
  tree rhstype;
7597
  enum tree_code coder;
7598
 
7599
  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
7600
     Strip such NOP_EXPRs, since RHS is used in non-lvalue context.  */
7601
  if (TREE_CODE (rhs) == NOP_EXPR
7602
      && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
7603
      && codel != REFERENCE_TYPE)
7604
    rhs = TREE_OPERAND (rhs, 0);
7605
 
7606
  if (type == error_mark_node
7607
      || rhs == error_mark_node
7608
      || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
7609
    return error_mark_node;
7610
 
7611
  if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
7612
       && TREE_CODE (type) != ARRAY_TYPE
7613
       && (TREE_CODE (type) != REFERENCE_TYPE
7614
           || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
7615
      || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
7616
          && (TREE_CODE (type) != REFERENCE_TYPE
7617
              || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
7618
      || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
7619
    rhs = decay_conversion (rhs);
7620
 
7621
  rhstype = TREE_TYPE (rhs);
7622
  coder = TREE_CODE (rhstype);
7623
 
7624
  if (coder == ERROR_MARK)
7625
    return error_mark_node;
7626
 
7627
  /* We accept references to incomplete types, so we can
7628
     return here before checking if RHS is of complete type.  */
7629
 
7630
  if (codel == REFERENCE_TYPE)
7631
    {
7632
      /* This should eventually happen in convert_arguments.  */
7633
      int savew = 0, savee = 0;
7634
 
7635
      if (fndecl)
7636
        savew = warningcount, savee = errorcount;
7637
      rhs = initialize_reference (type, rhs, flags, complain);
7638
      if (fndecl)
7639
        {
7640
          if (warningcount > savew)
7641
            warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
7642
          else if (errorcount > savee)
7643
            error ("in passing argument %P of %q+D", parmnum, fndecl);
7644
        }
7645
      return rhs;
7646
    }
7647
 
7648
  if (exp != 0)
7649
    exp = require_complete_type_sfinae (exp, complain);
7650
  if (exp == error_mark_node)
7651
    return error_mark_node;
7652
 
7653
  rhstype = non_reference (rhstype);
7654
 
7655
  type = complete_type (type);
7656
 
7657
  if (DIRECT_INIT_EXPR_P (type, rhs))
7658
    /* Don't try to do copy-initialization if we already have
7659
       direct-initialization.  */
7660
    return rhs;
7661
 
7662
  if (MAYBE_CLASS_TYPE_P (type))
7663
    return perform_implicit_conversion_flags (type, rhs, complain, flags);
7664
 
7665
  return convert_for_assignment (type, rhs, errtype, fndecl, parmnum,
7666
                                 complain, flags);
7667
}
7668
 
7669
/* If RETVAL is the address of, or a reference to, a local variable or
7670
   temporary give an appropriate warning.  */
7671
 
7672
static void
7673
maybe_warn_about_returning_address_of_local (tree retval)
7674
{
7675
  tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
7676
  tree whats_returned = retval;
7677
 
7678
  for (;;)
7679
    {
7680
      if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
7681
        whats_returned = TREE_OPERAND (whats_returned, 1);
7682
      else if (CONVERT_EXPR_P (whats_returned)
7683
               || TREE_CODE (whats_returned) == NON_LVALUE_EXPR)
7684
        whats_returned = TREE_OPERAND (whats_returned, 0);
7685
      else
7686
        break;
7687
    }
7688
 
7689
  if (TREE_CODE (whats_returned) != ADDR_EXPR)
7690
    return;
7691
  whats_returned = TREE_OPERAND (whats_returned, 0);
7692
 
7693
  if (TREE_CODE (valtype) == REFERENCE_TYPE)
7694
    {
7695
      if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
7696
          || TREE_CODE (whats_returned) == TARGET_EXPR)
7697
        {
7698
          warning (0, "returning reference to temporary");
7699
          return;
7700
        }
7701
      if (TREE_CODE (whats_returned) == VAR_DECL
7702
          && DECL_NAME (whats_returned)
7703
          && TEMP_NAME_P (DECL_NAME (whats_returned)))
7704
        {
7705
          warning (0, "reference to non-lvalue returned");
7706
          return;
7707
        }
7708
    }
7709
 
7710
  while (TREE_CODE (whats_returned) == COMPONENT_REF
7711
         || TREE_CODE (whats_returned) == ARRAY_REF)
7712
    whats_returned = TREE_OPERAND (whats_returned, 0);
7713
 
7714
  if (DECL_P (whats_returned)
7715
      && DECL_NAME (whats_returned)
7716
      && DECL_FUNCTION_SCOPE_P (whats_returned)
7717
      && !(TREE_STATIC (whats_returned)
7718
           || TREE_PUBLIC (whats_returned)))
7719
    {
7720
      if (TREE_CODE (valtype) == REFERENCE_TYPE)
7721
        warning (0, "reference to local variable %q+D returned",
7722
                 whats_returned);
7723
      else
7724
        warning (0, "address of local variable %q+D returned",
7725
                 whats_returned);
7726
      return;
7727
    }
7728
}
7729
 
7730
/* Check that returning RETVAL from the current function is valid.
7731
   Return an expression explicitly showing all conversions required to
7732
   change RETVAL into the function return type, and to assign it to
7733
   the DECL_RESULT for the function.  Set *NO_WARNING to true if
7734
   code reaches end of non-void function warning shouldn't be issued
7735
   on this RETURN_EXPR.  */
7736
 
7737
tree
7738
check_return_expr (tree retval, bool *no_warning)
7739
{
7740
  tree result;
7741
  /* The type actually returned by the function, after any
7742
     promotions.  */
7743
  tree valtype;
7744
  int fn_returns_value_p;
7745
  bool named_return_value_okay_p;
7746
 
7747
  *no_warning = false;
7748
 
7749
  /* A `volatile' function is one that isn't supposed to return, ever.
7750
     (This is a G++ extension, used to get better code for functions
7751
     that call the `volatile' function.)  */
7752
  if (TREE_THIS_VOLATILE (current_function_decl))
7753
    warning (0, "function declared %<noreturn%> has a %<return%> statement");
7754
 
7755
  /* Check for various simple errors.  */
7756
  if (DECL_DESTRUCTOR_P (current_function_decl))
7757
    {
7758
      if (retval)
7759
        error ("returning a value from a destructor");
7760
      return NULL_TREE;
7761
    }
7762
  else if (DECL_CONSTRUCTOR_P (current_function_decl))
7763
    {
7764
      if (in_function_try_handler)
7765
        /* If a return statement appears in a handler of the
7766
           function-try-block of a constructor, the program is ill-formed.  */
7767
        error ("cannot return from a handler of a function-try-block of a constructor");
7768
      else if (retval)
7769
        /* You can't return a value from a constructor.  */
7770
        error ("returning a value from a constructor");
7771
      return NULL_TREE;
7772
    }
7773
 
7774
  /* As an extension, deduce lambda return type from a return statement
7775
     anywhere in the body.  */
7776
  if (retval && LAMBDA_FUNCTION_P (current_function_decl))
7777
    {
7778
      tree lambda = CLASSTYPE_LAMBDA_EXPR (current_class_type);
7779
      if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
7780
        {
7781
          tree type = lambda_return_type (retval);
7782
          tree oldtype = LAMBDA_EXPR_RETURN_TYPE (lambda);
7783
 
7784
          if (oldtype == NULL_TREE)
7785
            apply_lambda_return_type (lambda, type);
7786
          /* If one of the answers is type-dependent, we can't do any
7787
             better until instantiation time.  */
7788
          else if (oldtype == dependent_lambda_return_type_node)
7789
            /* Leave it.  */;
7790
          else if (type == dependent_lambda_return_type_node)
7791
            apply_lambda_return_type (lambda, type);
7792
          else if (!same_type_p (type, oldtype))
7793
            error ("inconsistent types %qT and %qT deduced for "
7794
                   "lambda return type", type, oldtype);
7795
        }
7796
    }
7797
 
7798
  if (processing_template_decl)
7799
    {
7800
      current_function_returns_value = 1;
7801
      if (check_for_bare_parameter_packs (retval))
7802
        retval = error_mark_node;
7803
      return retval;
7804
    }
7805
 
7806
  /* When no explicit return-value is given in a function with a named
7807
     return value, the named return value is used.  */
7808
  result = DECL_RESULT (current_function_decl);
7809
  valtype = TREE_TYPE (result);
7810
  gcc_assert (valtype != NULL_TREE);
7811
  fn_returns_value_p = !VOID_TYPE_P (valtype);
7812
  if (!retval && DECL_NAME (result) && fn_returns_value_p)
7813
    retval = result;
7814
 
7815
  /* Check for a return statement with no return value in a function
7816
     that's supposed to return a value.  */
7817
  if (!retval && fn_returns_value_p)
7818
    {
7819
      permerror (input_location, "return-statement with no value, in function returning %qT",
7820
                 valtype);
7821
      /* Clear this, so finish_function won't say that we reach the
7822
         end of a non-void function (which we don't, we gave a
7823
         return!).  */
7824
      current_function_returns_null = 0;
7825
      /* And signal caller that TREE_NO_WARNING should be set on the
7826
         RETURN_EXPR to avoid control reaches end of non-void function
7827
         warnings in tree-cfg.c.  */
7828
      *no_warning = true;
7829
    }
7830
  /* Check for a return statement with a value in a function that
7831
     isn't supposed to return a value.  */
7832
  else if (retval && !fn_returns_value_p)
7833
    {
7834
      if (VOID_TYPE_P (TREE_TYPE (retval)))
7835
        /* You can return a `void' value from a function of `void'
7836
           type.  In that case, we have to evaluate the expression for
7837
           its side-effects.  */
7838
          finish_expr_stmt (retval);
7839
      else
7840
        permerror (input_location, "return-statement with a value, in function "
7841
                   "returning 'void'");
7842
      current_function_returns_null = 1;
7843
 
7844
      /* There's really no value to return, after all.  */
7845
      return NULL_TREE;
7846
    }
7847
  else if (!retval)
7848
    /* Remember that this function can sometimes return without a
7849
       value.  */
7850
    current_function_returns_null = 1;
7851
  else
7852
    /* Remember that this function did return a value.  */
7853
    current_function_returns_value = 1;
7854
 
7855
  /* Check for erroneous operands -- but after giving ourselves a
7856
     chance to provide an error about returning a value from a void
7857
     function.  */
7858
  if (error_operand_p (retval))
7859
    {
7860
      current_function_return_value = error_mark_node;
7861
      return error_mark_node;
7862
    }
7863
 
7864
  /* Only operator new(...) throw(), can return NULL [expr.new/13].  */
7865
  if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
7866
       || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
7867
      && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
7868
      && ! flag_check_new
7869
      && retval && null_ptr_cst_p (retval))
7870
    warning (0, "%<operator new%> must not return NULL unless it is "
7871
             "declared %<throw()%> (or -fcheck-new is in effect)");
7872
 
7873
  /* Effective C++ rule 15.  See also start_function.  */
7874
  if (warn_ecpp
7875
      && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
7876
    {
7877
      bool warn = true;
7878
 
7879
      /* The function return type must be a reference to the current
7880
        class.  */
7881
      if (TREE_CODE (valtype) == REFERENCE_TYPE
7882
          && same_type_ignoring_top_level_qualifiers_p
7883
              (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
7884
        {
7885
          /* Returning '*this' is obviously OK.  */
7886
          if (retval == current_class_ref)
7887
            warn = false;
7888
          /* If we are calling a function whose return type is the same of
7889
             the current class reference, it is ok.  */
7890
          else if (TREE_CODE (retval) == INDIRECT_REF
7891
                   && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
7892
            warn = false;
7893
        }
7894
 
7895
      if (warn)
7896
        warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
7897
    }
7898
 
7899
  /* The fabled Named Return Value optimization, as per [class.copy]/15:
7900
 
7901
     [...]      For  a function with a class return type, if the expression
7902
     in the return statement is the name of a local  object,  and  the  cv-
7903
     unqualified  type  of  the  local  object  is the same as the function
7904
     return type, an implementation is permitted to omit creating the  tem-
7905
     porary  object  to  hold  the function return value [...]
7906
 
7907
     So, if this is a value-returning function that always returns the same
7908
     local variable, remember it.
7909
 
7910
     It might be nice to be more flexible, and choose the first suitable
7911
     variable even if the function sometimes returns something else, but
7912
     then we run the risk of clobbering the variable we chose if the other
7913
     returned expression uses the chosen variable somehow.  And people expect
7914
     this restriction, anyway.  (jason 2000-11-19)
7915
 
7916
     See finish_function and finalize_nrv for the rest of this optimization.  */
7917
 
7918
  named_return_value_okay_p =
7919
    (retval != NULL_TREE
7920
     /* Must be a local, automatic variable.  */
7921
     && TREE_CODE (retval) == VAR_DECL
7922
     && DECL_CONTEXT (retval) == current_function_decl
7923
     && ! TREE_STATIC (retval)
7924
     && ! DECL_ANON_UNION_VAR_P (retval)
7925
     && (DECL_ALIGN (retval)
7926
         >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
7927
     /* The cv-unqualified type of the returned value must be the
7928
        same as the cv-unqualified return type of the
7929
        function.  */
7930
     && same_type_p ((TYPE_MAIN_VARIANT (TREE_TYPE (retval))),
7931
                     (TYPE_MAIN_VARIANT
7932
                      (TREE_TYPE (TREE_TYPE (current_function_decl)))))
7933
     /* And the returned value must be non-volatile.  */
7934
     && ! TYPE_VOLATILE (TREE_TYPE (retval)));
7935
 
7936
  if (fn_returns_value_p && flag_elide_constructors)
7937
    {
7938
      if (named_return_value_okay_p
7939
          && (current_function_return_value == NULL_TREE
7940
              || current_function_return_value == retval))
7941
        current_function_return_value = retval;
7942
      else
7943
        current_function_return_value = error_mark_node;
7944
    }
7945
 
7946
  /* We don't need to do any conversions when there's nothing being
7947
     returned.  */
7948
  if (!retval)
7949
    return NULL_TREE;
7950
 
7951
  /* Do any required conversions.  */
7952
  if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
7953
    /* No conversions are required.  */
7954
    ;
7955
  else
7956
    {
7957
      /* The type the function is declared to return.  */
7958
      tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
7959
      int flags = LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING;
7960
 
7961
      /* The functype's return type will have been set to void, if it
7962
         was an incomplete type.  Just treat this as 'return;' */
7963
      if (VOID_TYPE_P (functype))
7964
        return error_mark_node;
7965
 
7966
      /* Under C++0x [12.8/16 class.copy], a returned lvalue is sometimes
7967
         treated as an rvalue for the purposes of overload resolution to
7968
         favor move constructors over copy constructors.
7969
 
7970
         Note that these conditions are similar to, but not as strict as,
7971
         the conditions for the named return value optimization.  */
7972
      if ((cxx_dialect != cxx98)
7973
          && (TREE_CODE (retval) == VAR_DECL
7974
              || TREE_CODE (retval) == PARM_DECL)
7975
          && DECL_CONTEXT (retval) == current_function_decl
7976
          && !TREE_STATIC (retval)
7977
          && same_type_p ((TYPE_MAIN_VARIANT (TREE_TYPE (retval))),
7978
                          (TYPE_MAIN_VARIANT
7979
                           (TREE_TYPE (TREE_TYPE (current_function_decl)))))
7980
          /* This is only interesting for class type.  */
7981
          && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl))))
7982
        flags = flags | LOOKUP_PREFER_RVALUE;
7983
 
7984
      /* First convert the value to the function's return type, then
7985
         to the type of return value's location to handle the
7986
         case that functype is smaller than the valtype.  */
7987
      retval = convert_for_initialization
7988
        (NULL_TREE, functype, retval, flags, ICR_RETURN, NULL_TREE, 0,
7989
         tf_warning_or_error);
7990
      retval = convert (valtype, retval);
7991
 
7992
      /* If the conversion failed, treat this just like `return;'.  */
7993
      if (retval == error_mark_node)
7994
        return retval;
7995
      /* We can't initialize a register from a AGGR_INIT_EXPR.  */
7996
      else if (! cfun->returns_struct
7997
               && TREE_CODE (retval) == TARGET_EXPR
7998
               && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
7999
        retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
8000
                         TREE_OPERAND (retval, 0));
8001
      else
8002
        maybe_warn_about_returning_address_of_local (retval);
8003
    }
8004
 
8005
  /* Actually copy the value returned into the appropriate location.  */
8006
  if (retval && retval != result)
8007
    retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
8008
 
8009
  return retval;
8010
}
8011
 
8012
 
8013
/* Returns nonzero if the pointer-type FROM can be converted to the
8014
   pointer-type TO via a qualification conversion.  If CONSTP is -1,
8015
   then we return nonzero if the pointers are similar, and the
8016
   cv-qualification signature of FROM is a proper subset of that of TO.
8017
 
8018
   If CONSTP is positive, then all outer pointers have been
8019
   const-qualified.  */
8020
 
8021
static int
8022
comp_ptr_ttypes_real (tree to, tree from, int constp)
8023
{
8024
  bool to_more_cv_qualified = false;
8025
  bool is_opaque_pointer = false;
8026
 
8027
  for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
8028
    {
8029
      if (TREE_CODE (to) != TREE_CODE (from))
8030
        return 0;
8031
 
8032
      if (TREE_CODE (from) == OFFSET_TYPE
8033
          && !same_type_p (TYPE_OFFSET_BASETYPE (from),
8034
                           TYPE_OFFSET_BASETYPE (to)))
8035
        return 0;
8036
 
8037
      /* Const and volatile mean something different for function types,
8038
         so the usual checks are not appropriate.  */
8039
      if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
8040
        {
8041
          if (!at_least_as_qualified_p (to, from))
8042
            return 0;
8043
 
8044
          if (!at_least_as_qualified_p (from, to))
8045
            {
8046
              if (constp == 0)
8047
                return 0;
8048
              to_more_cv_qualified = true;
8049
            }
8050
 
8051
          if (constp > 0)
8052
            constp &= TYPE_READONLY (to);
8053
        }
8054
 
8055
      if (TREE_CODE (to) == VECTOR_TYPE)
8056
        is_opaque_pointer = vector_targets_convertible_p (to, from);
8057
 
8058
      if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
8059
        return ((constp >= 0 || to_more_cv_qualified)
8060
                && (is_opaque_pointer
8061
                    || same_type_ignoring_top_level_qualifiers_p (to, from)));
8062
    }
8063
}
8064
 
8065
/* When comparing, say, char ** to char const **, this function takes
8066
   the 'char *' and 'char const *'.  Do not pass non-pointer/reference
8067
   types to this function.  */
8068
 
8069
int
8070
comp_ptr_ttypes (tree to, tree from)
8071
{
8072
  return comp_ptr_ttypes_real (to, from, 1);
8073
}
8074
 
8075
/* Returns true iff FNTYPE is a non-class type that involves
8076
   error_mark_node.  We can get FUNCTION_TYPE with buried error_mark_node
8077
   if a parameter type is ill-formed.  */
8078
 
8079
bool
8080
error_type_p (const_tree type)
8081
{
8082
  tree t;
8083
 
8084
  switch (TREE_CODE (type))
8085
    {
8086
    case ERROR_MARK:
8087
      return true;
8088
 
8089
    case POINTER_TYPE:
8090
    case REFERENCE_TYPE:
8091
    case OFFSET_TYPE:
8092
      return error_type_p (TREE_TYPE (type));
8093
 
8094
    case FUNCTION_TYPE:
8095
    case METHOD_TYPE:
8096
      if (error_type_p (TREE_TYPE (type)))
8097
        return true;
8098
      for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
8099
        if (error_type_p (TREE_VALUE (t)))
8100
          return true;
8101
      return false;
8102
 
8103
    case RECORD_TYPE:
8104
      if (TYPE_PTRMEMFUNC_P (type))
8105
        return error_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type));
8106
      return false;
8107
 
8108
    default:
8109
      return false;
8110
    }
8111
}
8112
 
8113
/* Returns 1 if to and from are (possibly multi-level) pointers to the same
8114
   type or inheritance-related types, regardless of cv-quals.  */
8115
 
8116
int
8117
ptr_reasonably_similar (const_tree to, const_tree from)
8118
{
8119
  for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
8120
    {
8121
      /* Any target type is similar enough to void.  */
8122
      if (TREE_CODE (to) == VOID_TYPE)
8123
        return !error_type_p (from);
8124
      if (TREE_CODE (from) == VOID_TYPE)
8125
        return !error_type_p (to);
8126
 
8127
      if (TREE_CODE (to) != TREE_CODE (from))
8128
        return 0;
8129
 
8130
      if (TREE_CODE (from) == OFFSET_TYPE
8131
          && comptypes (TYPE_OFFSET_BASETYPE (to),
8132
                        TYPE_OFFSET_BASETYPE (from),
8133
                        COMPARE_BASE | COMPARE_DERIVED))
8134
        continue;
8135
 
8136
      if (TREE_CODE (to) == VECTOR_TYPE
8137
          && vector_types_convertible_p (to, from, false))
8138
        return 1;
8139
 
8140
      if (TREE_CODE (to) == INTEGER_TYPE
8141
          && TYPE_PRECISION (to) == TYPE_PRECISION (from))
8142
        return 1;
8143
 
8144
      if (TREE_CODE (to) == FUNCTION_TYPE)
8145
        return !error_type_p (to) && !error_type_p (from);
8146
 
8147
      if (TREE_CODE (to) != POINTER_TYPE)
8148
        return comptypes
8149
          (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
8150
           COMPARE_BASE | COMPARE_DERIVED);
8151
    }
8152
}
8153
 
8154
/* Return true if TO and FROM (both of which are POINTER_TYPEs or
8155
   pointer-to-member types) are the same, ignoring cv-qualification at
8156
   all levels.  */
8157
 
8158
bool
8159
comp_ptr_ttypes_const (tree to, tree from)
8160
{
8161
  bool is_opaque_pointer = false;
8162
 
8163
  for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
8164
    {
8165
      if (TREE_CODE (to) != TREE_CODE (from))
8166
        return false;
8167
 
8168
      if (TREE_CODE (from) == OFFSET_TYPE
8169
          && same_type_p (TYPE_OFFSET_BASETYPE (from),
8170
                          TYPE_OFFSET_BASETYPE (to)))
8171
          continue;
8172
 
8173
      if (TREE_CODE (to) == VECTOR_TYPE)
8174
        is_opaque_pointer = vector_targets_convertible_p (to, from);
8175
 
8176
      if (TREE_CODE (to) != POINTER_TYPE)
8177
        return (is_opaque_pointer
8178
                || same_type_ignoring_top_level_qualifiers_p (to, from));
8179
    }
8180
}
8181
 
8182
/* Returns the type qualifiers for this type, including the qualifiers on the
8183
   elements for an array type.  */
8184
 
8185
int
8186
cp_type_quals (const_tree type)
8187
{
8188
  int quals;
8189
  /* This CONST_CAST is okay because strip_array_types returns its
8190
     argument unmodified and we assign it to a const_tree.  */
8191
  type = strip_array_types (CONST_CAST_TREE (type));
8192
  if (type == error_mark_node
8193
      /* Quals on a FUNCTION_TYPE are memfn quals.  */
8194
      || TREE_CODE (type) == FUNCTION_TYPE)
8195
    return TYPE_UNQUALIFIED;
8196
  quals = TYPE_QUALS (type);
8197
  /* METHOD and REFERENCE_TYPEs should never have quals.  */
8198
  gcc_assert ((TREE_CODE (type) != METHOD_TYPE
8199
               && TREE_CODE (type) != REFERENCE_TYPE)
8200
              || ((quals & (TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE))
8201
                  == TYPE_UNQUALIFIED));
8202
  return quals;
8203
}
8204
 
8205
/* Returns the function-cv-quals for TYPE, which must be a FUNCTION_TYPE or
8206
   METHOD_TYPE.  */
8207
 
8208
int
8209
type_memfn_quals (const_tree type)
8210
{
8211
  if (TREE_CODE (type) == FUNCTION_TYPE)
8212
    return TYPE_QUALS (type);
8213
  else if (TREE_CODE (type) == METHOD_TYPE)
8214
    return cp_type_quals (class_of_this_parm (type));
8215
  else
8216
    gcc_unreachable ();
8217
}
8218
 
8219
/* Returns the FUNCTION_TYPE TYPE with its function-cv-quals changed to
8220
   MEMFN_QUALS.  */
8221
 
8222
tree
8223
apply_memfn_quals (tree type, cp_cv_quals memfn_quals)
8224
{
8225
  /* Could handle METHOD_TYPE here if necessary.  */
8226
  gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8227
  if (TYPE_QUALS (type) == memfn_quals)
8228
    return type;
8229
  /* This should really have a different TYPE_MAIN_VARIANT, but that gets
8230
     complex.  */
8231
  return build_qualified_type (type, memfn_quals);
8232
}
8233
 
8234
/* Returns nonzero if TYPE is const or volatile.  */
8235
 
8236
bool
8237
cv_qualified_p (const_tree type)
8238
{
8239
  int quals = cp_type_quals (type);
8240
  return (quals & (TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE)) != 0;
8241
}
8242
 
8243
/* Returns nonzero if the TYPE contains a mutable member.  */
8244
 
8245
bool
8246
cp_has_mutable_p (const_tree type)
8247
{
8248
  /* This CONST_CAST is okay because strip_array_types returns its
8249
     argument unmodified and we assign it to a const_tree.  */
8250
  type = strip_array_types (CONST_CAST_TREE(type));
8251
 
8252
  return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
8253
}
8254
 
8255
/* Set TREE_READONLY and TREE_VOLATILE on DECL as indicated by the
8256
   TYPE_QUALS.  For a VAR_DECL, this may be an optimistic
8257
   approximation.  In particular, consider:
8258
 
8259
     int f();
8260
     struct S { int i; };
8261
     const S s = { f(); }
8262
 
8263
   Here, we will make "s" as TREE_READONLY (because it is declared
8264
   "const") -- only to reverse ourselves upon seeing that the
8265
   initializer is non-constant.  */
8266
 
8267
void
8268
cp_apply_type_quals_to_decl (int type_quals, tree decl)
8269
{
8270
  tree type = TREE_TYPE (decl);
8271
 
8272
  if (type == error_mark_node)
8273
    return;
8274
 
8275
  if (TREE_CODE (decl) == TYPE_DECL)
8276
    return;
8277
 
8278
  gcc_assert (!(TREE_CODE (type) == FUNCTION_TYPE
8279
                && type_quals != TYPE_UNQUALIFIED));
8280
 
8281
  /* Avoid setting TREE_READONLY incorrectly.  */
8282
  /* We used to check TYPE_NEEDS_CONSTRUCTING here, but now a constexpr
8283
     constructor can produce constant init, so rely on cp_finish_decl to
8284
     clear TREE_READONLY if the variable has non-constant init.  */
8285
 
8286
  /* If the type has a mutable component, that component might be
8287
     modified.  */
8288
  if (TYPE_HAS_MUTABLE_P (type))
8289
    type_quals &= ~TYPE_QUAL_CONST;
8290
 
8291
  c_apply_type_quals_to_decl (type_quals, decl);
8292
}
8293
 
8294
/* Subroutine of casts_away_constness.  Make T1 and T2 point at
8295
   exemplar types such that casting T1 to T2 is casting away constness
8296
   if and only if there is no implicit conversion from T1 to T2.  */
8297
 
8298
static void
8299
casts_away_constness_r (tree *t1, tree *t2)
8300
{
8301
  int quals1;
8302
  int quals2;
8303
 
8304
  /* [expr.const.cast]
8305
 
8306
     For multi-level pointer to members and multi-level mixed pointers
8307
     and pointers to members (conv.qual), the "member" aspect of a
8308
     pointer to member level is ignored when determining if a const
8309
     cv-qualifier has been cast away.  */
8310
  /* [expr.const.cast]
8311
 
8312
     For  two  pointer types:
8313
 
8314
            X1 is T1cv1,1 * ... cv1,N *   where T1 is not a pointer type
8315
            X2 is T2cv2,1 * ... cv2,M *   where T2 is not a pointer type
8316
            K is min(N,M)
8317
 
8318
     casting from X1 to X2 casts away constness if, for a non-pointer
8319
     type T there does not exist an implicit conversion (clause
8320
     _conv_) from:
8321
 
8322
            Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
8323
 
8324
     to
8325
 
8326
            Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *.  */
8327
  if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
8328
      || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
8329
    {
8330
      *t1 = cp_build_qualified_type (void_type_node,
8331
                                     cp_type_quals (*t1));
8332
      *t2 = cp_build_qualified_type (void_type_node,
8333
                                     cp_type_quals (*t2));
8334
      return;
8335
    }
8336
 
8337
  quals1 = cp_type_quals (*t1);
8338
  quals2 = cp_type_quals (*t2);
8339
 
8340
  if (TYPE_PTRMEM_P (*t1))
8341
    *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
8342
  else
8343
    *t1 = TREE_TYPE (*t1);
8344
  if (TYPE_PTRMEM_P (*t2))
8345
    *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
8346
  else
8347
    *t2 = TREE_TYPE (*t2);
8348
 
8349
  casts_away_constness_r (t1, t2);
8350
  *t1 = build_pointer_type (*t1);
8351
  *t2 = build_pointer_type (*t2);
8352
  *t1 = cp_build_qualified_type (*t1, quals1);
8353
  *t2 = cp_build_qualified_type (*t2, quals2);
8354
}
8355
 
8356
/* Returns nonzero if casting from TYPE1 to TYPE2 casts away
8357
   constness.
8358
 
8359
   ??? This function returns non-zero if casting away qualifiers not
8360
   just const.  We would like to return to the caller exactly which
8361
   qualifiers are casted away to give more accurate diagnostics.
8362
*/
8363
 
8364
static bool
8365
casts_away_constness (tree t1, tree t2)
8366
{
8367
  if (TREE_CODE (t2) == REFERENCE_TYPE)
8368
    {
8369
      /* [expr.const.cast]
8370
 
8371
         Casting from an lvalue of type T1 to an lvalue of type T2
8372
         using a reference cast casts away constness if a cast from an
8373
         rvalue of type "pointer to T1" to the type "pointer to T2"
8374
         casts away constness.  */
8375
      t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
8376
      return casts_away_constness (build_pointer_type (t1),
8377
                                   build_pointer_type (TREE_TYPE (t2)));
8378
    }
8379
 
8380
  if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
8381
    /* [expr.const.cast]
8382
 
8383
       Casting from an rvalue of type "pointer to data member of X
8384
       of type T1" to the type "pointer to data member of Y of type
8385
       T2" casts away constness if a cast from an rvalue of type
8386
       "pointer to T1" to the type "pointer to T2" casts away
8387
       constness.  */
8388
    return casts_away_constness
8389
      (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
8390
       build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
8391
 
8392
  /* Casting away constness is only something that makes sense for
8393
     pointer or reference types.  */
8394
  if (TREE_CODE (t1) != POINTER_TYPE
8395
      || TREE_CODE (t2) != POINTER_TYPE)
8396
    return false;
8397
 
8398
  /* Top-level qualifiers don't matter.  */
8399
  t1 = TYPE_MAIN_VARIANT (t1);
8400
  t2 = TYPE_MAIN_VARIANT (t2);
8401
  casts_away_constness_r (&t1, &t2);
8402
  if (!can_convert (t2, t1))
8403
    return true;
8404
 
8405
  return false;
8406
}
8407
 
8408
/* If T is a REFERENCE_TYPE return the type to which T refers.
8409
   Otherwise, return T itself.  */
8410
 
8411
tree
8412
non_reference (tree t)
8413
{
8414
  if (t && TREE_CODE (t) == REFERENCE_TYPE)
8415
    t = TREE_TYPE (t);
8416
  return t;
8417
}
8418
 
8419
 
8420
/* Return nonzero if REF is an lvalue valid for this language;
8421
   otherwise, print an error message and return zero.  USE says
8422
   how the lvalue is being used and so selects the error message.  */
8423
 
8424
int
8425
lvalue_or_else (tree ref, enum lvalue_use use, tsubst_flags_t complain)
8426
{
8427
  cp_lvalue_kind kind = lvalue_kind (ref);
8428
 
8429
  if (kind == clk_none)
8430
    {
8431
      if (complain & tf_error)
8432
        lvalue_error (input_location, use);
8433
      return 0;
8434
    }
8435
  else if (kind & (clk_rvalueref|clk_class))
8436
    {
8437
      if (!(complain & tf_error))
8438
        return 0;
8439
      if (kind & clk_class)
8440
        /* Make this a permerror because we used to accept it.  */
8441
        permerror (input_location, "using temporary as lvalue");
8442
      else
8443
        error ("using xvalue (rvalue reference) as lvalue");
8444
    }
8445
  return 1;
8446
}
8447
 
8448
/* Return true if a user-defined literal operator is a raw operator.  */
8449
 
8450
bool
8451
check_raw_literal_operator (const_tree decl)
8452
{
8453
  tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8454
  tree argtype;
8455
  int arity;
8456
  bool maybe_raw_p = false;
8457
 
8458
  /* Count the number and type of arguments and check for ellipsis.  */
8459
  for (argtype = argtypes, arity = 0;
8460
       argtype && argtype != void_list_node;
8461
       ++arity, argtype = TREE_CHAIN (argtype))
8462
    {
8463
      tree t = TREE_VALUE (argtype);
8464
 
8465
      if (same_type_p (t, const_string_type_node))
8466
        maybe_raw_p = true;
8467
    }
8468
  if (!argtype)
8469
    return false; /* Found ellipsis.  */
8470
 
8471
  if (!maybe_raw_p || arity != 1)
8472
    return false;
8473
 
8474
  return true;
8475
}
8476
 
8477
 
8478
/* Return true if a user-defined literal operator has one of the allowed
8479
   argument types.  */
8480
 
8481
bool
8482
check_literal_operator_args (const_tree decl,
8483
                             bool *long_long_unsigned_p, bool *long_double_p)
8484
{
8485
  tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8486
 
8487
  *long_long_unsigned_p = false;
8488
  *long_double_p = false;
8489
  if (processing_template_decl || processing_specialization)
8490
    return argtypes == void_list_node;
8491
  else
8492
    {
8493
      tree argtype;
8494
      int arity;
8495
      int max_arity = 2;
8496
 
8497
      /* Count the number and type of arguments and check for ellipsis.  */
8498
      for (argtype = argtypes, arity = 0;
8499
           argtype && argtype != void_list_node;
8500
           argtype = TREE_CHAIN (argtype))
8501
        {
8502
          tree t = TREE_VALUE (argtype);
8503
          ++arity;
8504
 
8505
          if (TREE_CODE (t) == POINTER_TYPE)
8506
            {
8507
              bool maybe_raw_p = false;
8508
              t = TREE_TYPE (t);
8509
              if (cp_type_quals (t) != TYPE_QUAL_CONST)
8510
                return false;
8511
              t = TYPE_MAIN_VARIANT (t);
8512
              if ((maybe_raw_p = same_type_p (t, char_type_node))
8513
                  || same_type_p (t, wchar_type_node)
8514
                  || same_type_p (t, char16_type_node)
8515
                  || same_type_p (t, char32_type_node))
8516
                {
8517
                  argtype = TREE_CHAIN (argtype);
8518
                  if (!argtype)
8519
                    return false;
8520
                  t = TREE_VALUE (argtype);
8521
                  if (maybe_raw_p && argtype == void_list_node)
8522
                    return true;
8523
                  else if (same_type_p (t, size_type_node))
8524
                    {
8525
                      ++arity;
8526
                      continue;
8527
                    }
8528
                  else
8529
                    return false;
8530
                }
8531
            }
8532
          else if (same_type_p (t, long_long_unsigned_type_node))
8533
            {
8534
              max_arity = 1;
8535
              *long_long_unsigned_p = true;
8536
            }
8537
          else if (same_type_p (t, long_double_type_node))
8538
            {
8539
              max_arity = 1;
8540
              *long_double_p = true;
8541
            }
8542
          else if (same_type_p (t, char_type_node))
8543
            max_arity = 1;
8544
          else if (same_type_p (t, wchar_type_node))
8545
            max_arity = 1;
8546
          else if (same_type_p (t, char16_type_node))
8547
            max_arity = 1;
8548
          else if (same_type_p (t, char32_type_node))
8549
            max_arity = 1;
8550
          else
8551
            return false;
8552
        }
8553
      if (!argtype)
8554
        return false; /* Found ellipsis.  */
8555
 
8556
      if (arity != max_arity)
8557
        return false;
8558
 
8559
      return true;
8560
    }
8561
}

powered by: WebSVN 2.1.0

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