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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [cp/] [typeck.c] - Blame information for rev 283

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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