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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc4/] [gcc/] [cp/] [tree.c] - Blame information for rev 519

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 283 jeremybenn
/* Language-dependent node constructors for parse phase of GNU compiler.
2
   Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3
   1999, 2000, 2001, 2002, 2003, 2004, 2005, 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
#include "config.h"
24
#include "system.h"
25
#include "coretypes.h"
26
#include "tm.h"
27
#include "tree.h"
28
#include "cp-tree.h"
29
#include "flags.h"
30
#include "real.h"
31
#include "rtl.h"
32
#include "toplev.h"
33
#include "insn-config.h"
34
#include "integrate.h"
35
#include "tree-inline.h"
36
#include "debug.h"
37
#include "target.h"
38
#include "convert.h"
39
#include "tree-flow.h"
40
#include "cgraph.h"
41
 
42
static tree bot_manip (tree *, int *, void *);
43
static tree bot_replace (tree *, int *, void *);
44
static int list_hash_eq (const void *, const void *);
45
static hashval_t list_hash_pieces (tree, tree, tree);
46
static hashval_t list_hash (const void *);
47
static cp_lvalue_kind lvalue_p_1 (const_tree);
48
static tree build_target_expr (tree, tree);
49
static tree count_trees_r (tree *, int *, void *);
50
static tree verify_stmt_tree_r (tree *, int *, void *);
51
static tree build_local_temp (tree);
52
 
53
static tree handle_java_interface_attribute (tree *, tree, tree, int, bool *);
54
static tree handle_com_interface_attribute (tree *, tree, tree, int, bool *);
55
static tree handle_init_priority_attribute (tree *, tree, tree, int, bool *);
56
 
57
/* If REF is an lvalue, returns the kind of lvalue that REF is.
58
   Otherwise, returns clk_none.  */
59
 
60
static cp_lvalue_kind
61
lvalue_p_1 (const_tree ref)
62
{
63
  cp_lvalue_kind op1_lvalue_kind = clk_none;
64
  cp_lvalue_kind op2_lvalue_kind = clk_none;
65
 
66
  /* Expressions of reference type are sometimes wrapped in
67
     INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
68
     representation, not part of the language, so we have to look
69
     through them.  */
70
  if (TREE_CODE (ref) == INDIRECT_REF
71
      && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0)))
72
          == REFERENCE_TYPE)
73
    return lvalue_p_1 (TREE_OPERAND (ref, 0));
74
 
75
  if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
76
    {
77
      /* unnamed rvalue references are rvalues */
78
      if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref))
79
          && TREE_CODE (ref) != PARM_DECL
80
          && TREE_CODE (ref) != VAR_DECL
81
          && TREE_CODE (ref) != COMPONENT_REF)
82
        return clk_rvalueref;
83
 
84
      /* lvalue references and named rvalue references are lvalues.  */
85
      return clk_ordinary;
86
    }
87
 
88
  if (ref == current_class_ptr)
89
    return clk_none;
90
 
91
  switch (TREE_CODE (ref))
92
    {
93
    case SAVE_EXPR:
94
      return clk_none;
95
      /* preincrements and predecrements are valid lvals, provided
96
         what they refer to are valid lvals.  */
97
    case PREINCREMENT_EXPR:
98
    case PREDECREMENT_EXPR:
99
    case TRY_CATCH_EXPR:
100
    case WITH_CLEANUP_EXPR:
101
    case REALPART_EXPR:
102
    case IMAGPART_EXPR:
103
      return lvalue_p_1 (TREE_OPERAND (ref, 0));
104
 
105
    case COMPONENT_REF:
106
      op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0));
107
      /* Look at the member designator.  */
108
      if (!op1_lvalue_kind)
109
        ;
110
      else if (is_overloaded_fn (TREE_OPERAND (ref, 1)))
111
        /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
112
           situations.  If we're seeing a COMPONENT_REF, it's a non-static
113
           member, so it isn't an lvalue. */
114
        op1_lvalue_kind = clk_none;
115
      else if (TREE_CODE (TREE_OPERAND (ref, 1)) != FIELD_DECL)
116
        /* This can be IDENTIFIER_NODE in a template.  */;
117
      else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
118
        {
119
          /* Clear the ordinary bit.  If this object was a class
120
             rvalue we want to preserve that information.  */
121
          op1_lvalue_kind &= ~clk_ordinary;
122
          /* The lvalue is for a bitfield.  */
123
          op1_lvalue_kind |= clk_bitfield;
124
        }
125
      else if (DECL_PACKED (TREE_OPERAND (ref, 1)))
126
        op1_lvalue_kind |= clk_packed;
127
 
128
      return op1_lvalue_kind;
129
 
130
    case STRING_CST:
131
    case COMPOUND_LITERAL_EXPR:
132
      return clk_ordinary;
133
 
134
    case CONST_DECL:
135
      /* CONST_DECL without TREE_STATIC are enumeration values and
136
         thus not lvalues.  With TREE_STATIC they are used by ObjC++
137
         in objc_build_string_object and need to be considered as
138
         lvalues.  */
139
      if (! TREE_STATIC (ref))
140
        return clk_none;
141
    case VAR_DECL:
142
      if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
143
          && DECL_LANG_SPECIFIC (ref)
144
          && DECL_IN_AGGR_P (ref))
145
        return clk_none;
146
    case INDIRECT_REF:
147
    case ARRAY_REF:
148
    case PARM_DECL:
149
    case RESULT_DECL:
150
      if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
151
        return clk_ordinary;
152
      break;
153
 
154
      /* A currently unresolved scope ref.  */
155
    case SCOPE_REF:
156
      gcc_unreachable ();
157
    case MAX_EXPR:
158
    case MIN_EXPR:
159
      /* Disallow <? and >? as lvalues if either argument side-effects.  */
160
      if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 0))
161
          || TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 1)))
162
        return clk_none;
163
      op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0));
164
      op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1));
165
      break;
166
 
167
    case COND_EXPR:
168
      op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1)
169
                                    ? TREE_OPERAND (ref, 1)
170
                                    : TREE_OPERAND (ref, 0));
171
      op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 2));
172
      break;
173
 
174
    case MODIFY_EXPR:
175
      return clk_ordinary;
176
 
177
    case COMPOUND_EXPR:
178
      return lvalue_p_1 (TREE_OPERAND (ref, 1));
179
 
180
    case TARGET_EXPR:
181
      return clk_class;
182
 
183
    case VA_ARG_EXPR:
184
      return (CLASS_TYPE_P (TREE_TYPE (ref)) ? clk_class : clk_none);
185
 
186
    case CALL_EXPR:
187
      /* Any class-valued call would be wrapped in a TARGET_EXPR.  */
188
      return clk_none;
189
 
190
    case FUNCTION_DECL:
191
      /* All functions (except non-static-member functions) are
192
         lvalues.  */
193
      return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
194
              ? clk_none : clk_ordinary);
195
 
196
    case BASELINK:
197
      /* We now represent a reference to a single static member function
198
         with a BASELINK.  */
199
      /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
200
         its argument unmodified and we assign it to a const_tree.  */
201
      return lvalue_p_1 (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref)));
202
 
203
    case NON_DEPENDENT_EXPR:
204
      /* We must consider NON_DEPENDENT_EXPRs to be lvalues so that
205
         things like "&E" where "E" is an expression with a
206
         non-dependent type work. It is safe to be lenient because an
207
         error will be issued when the template is instantiated if "E"
208
         is not an lvalue.  */
209
      return clk_ordinary;
210
 
211
    default:
212
      break;
213
    }
214
 
215
  /* If one operand is not an lvalue at all, then this expression is
216
     not an lvalue.  */
217
  if (!op1_lvalue_kind || !op2_lvalue_kind)
218
    return clk_none;
219
 
220
  /* Otherwise, it's an lvalue, and it has all the odd properties
221
     contributed by either operand.  */
222
  op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
223
  /* It's not an ordinary lvalue if it involves any other kind.  */
224
  if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
225
    op1_lvalue_kind &= ~clk_ordinary;
226
  /* It can't be both a pseudo-lvalue and a non-addressable lvalue.
227
     A COND_EXPR of those should be wrapped in a TARGET_EXPR.  */
228
  if ((op1_lvalue_kind & (clk_rvalueref|clk_class))
229
      && (op1_lvalue_kind & (clk_bitfield|clk_packed)))
230
    op1_lvalue_kind = clk_none;
231
  return op1_lvalue_kind;
232
}
233
 
234
/* Returns the kind of lvalue that REF is, in the sense of
235
   [basic.lval].  This function should really be named lvalue_p; it
236
   computes the C++ definition of lvalue.  */
237
 
238
cp_lvalue_kind
239
real_lvalue_p (tree ref)
240
{
241
  cp_lvalue_kind kind = lvalue_p_1 (ref);
242
  if (kind & (clk_rvalueref|clk_class))
243
    return clk_none;
244
  else
245
    return kind;
246
}
247
 
248
/* This differs from real_lvalue_p in that class rvalues are considered
249
   lvalues.  */
250
 
251
bool
252
lvalue_p (const_tree ref)
253
{
254
  return (lvalue_p_1 (ref) != clk_none);
255
}
256
 
257
/* This differs from real_lvalue_p in that rvalues formed by dereferencing
258
   rvalue references are considered rvalues.  */
259
 
260
bool
261
lvalue_or_rvalue_with_address_p (const_tree ref)
262
{
263
  cp_lvalue_kind kind = lvalue_p_1 (ref);
264
  if (kind & clk_class)
265
    return false;
266
  else
267
    return (kind != clk_none);
268
}
269
 
270
/* Test whether DECL is a builtin that may appear in a
271
   constant-expression. */
272
 
273
bool
274
builtin_valid_in_constant_expr_p (const_tree decl)
275
{
276
  /* At present BUILT_IN_CONSTANT_P is the only builtin we're allowing
277
     in constant-expressions.  We may want to add other builtins later. */
278
  return DECL_IS_BUILTIN_CONSTANT_P (decl);
279
}
280
 
281
/* Build a TARGET_EXPR, initializing the DECL with the VALUE.  */
282
 
283
static tree
284
build_target_expr (tree decl, tree value)
285
{
286
  tree t;
287
 
288
#ifdef ENABLE_CHECKING
289
  gcc_assert (VOID_TYPE_P (TREE_TYPE (value))
290
              || TREE_TYPE (decl) == TREE_TYPE (value)
291
              || useless_type_conversion_p (TREE_TYPE (decl),
292
                                            TREE_TYPE (value)));
293
#endif
294
 
295
  t = build4 (TARGET_EXPR, TREE_TYPE (decl), decl, value,
296
              cxx_maybe_build_cleanup (decl), NULL_TREE);
297
  /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
298
     ignore the TARGET_EXPR.  If there really turn out to be no
299
     side-effects, then the optimizer should be able to get rid of
300
     whatever code is generated anyhow.  */
301
  TREE_SIDE_EFFECTS (t) = 1;
302
 
303
  return t;
304
}
305
 
306
/* Return an undeclared local temporary of type TYPE for use in building a
307
   TARGET_EXPR.  */
308
 
309
static tree
310
build_local_temp (tree type)
311
{
312
  tree slot = build_decl (input_location,
313
                          VAR_DECL, NULL_TREE, type);
314
  DECL_ARTIFICIAL (slot) = 1;
315
  DECL_IGNORED_P (slot) = 1;
316
  DECL_CONTEXT (slot) = current_function_decl;
317
  layout_decl (slot, 0);
318
  return slot;
319
}
320
 
321
/* Set various status flags when building an AGGR_INIT_EXPR object T.  */
322
 
323
static void
324
process_aggr_init_operands (tree t)
325
{
326
  bool side_effects;
327
 
328
  side_effects = TREE_SIDE_EFFECTS (t);
329
  if (!side_effects)
330
    {
331
      int i, n;
332
      n = TREE_OPERAND_LENGTH (t);
333
      for (i = 1; i < n; i++)
334
        {
335
          tree op = TREE_OPERAND (t, i);
336
          if (op && TREE_SIDE_EFFECTS (op))
337
            {
338
              side_effects = 1;
339
              break;
340
            }
341
        }
342
    }
343
  TREE_SIDE_EFFECTS (t) = side_effects;
344
}
345
 
346
/* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
347
   FN, and SLOT.  NARGS is the number of call arguments which are specified
348
   as a tree array ARGS.  */
349
 
350
static tree
351
build_aggr_init_array (tree return_type, tree fn, tree slot, int nargs,
352
                       tree *args)
353
{
354
  tree t;
355
  int i;
356
 
357
  t = build_vl_exp (AGGR_INIT_EXPR, nargs + 3);
358
  TREE_TYPE (t) = return_type;
359
  AGGR_INIT_EXPR_FN (t) = fn;
360
  AGGR_INIT_EXPR_SLOT (t) = slot;
361
  for (i = 0; i < nargs; i++)
362
    AGGR_INIT_EXPR_ARG (t, i) = args[i];
363
  process_aggr_init_operands (t);
364
  return t;
365
}
366
 
367
/* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
368
   target.  TYPE is the type to be initialized.
369
 
370
   Build an AGGR_INIT_EXPR to represent the initialization.  This function
371
   differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
372
   to initialize another object, whereas a TARGET_EXPR can either
373
   initialize another object or create its own temporary object, and as a
374
   result building up a TARGET_EXPR requires that the type's destructor be
375
   callable.  */
376
 
377
tree
378
build_aggr_init_expr (tree type, tree init)
379
{
380
  tree fn;
381
  tree slot;
382
  tree rval;
383
  int is_ctor;
384
 
385
  /* Make sure that we're not trying to create an instance of an
386
     abstract class.  */
387
  abstract_virtuals_error (NULL_TREE, type);
388
 
389
  if (TREE_CODE (init) == CALL_EXPR)
390
    fn = CALL_EXPR_FN (init);
391
  else if (TREE_CODE (init) == AGGR_INIT_EXPR)
392
    fn = AGGR_INIT_EXPR_FN (init);
393
  else
394
    return convert (type, init);
395
 
396
  is_ctor = (TREE_CODE (fn) == ADDR_EXPR
397
             && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
398
             && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
399
 
400
  /* We split the CALL_EXPR into its function and its arguments here.
401
     Then, in expand_expr, we put them back together.  The reason for
402
     this is that this expression might be a default argument
403
     expression.  In that case, we need a new temporary every time the
404
     expression is used.  That's what break_out_target_exprs does; it
405
     replaces every AGGR_INIT_EXPR with a copy that uses a fresh
406
     temporary slot.  Then, expand_expr builds up a call-expression
407
     using the new slot.  */
408
 
409
  /* If we don't need to use a constructor to create an object of this
410
     type, don't mess with AGGR_INIT_EXPR.  */
411
  if (is_ctor || TREE_ADDRESSABLE (type))
412
    {
413
      slot = build_local_temp (type);
414
 
415
      if (TREE_CODE(init) == CALL_EXPR)
416
        rval = build_aggr_init_array (void_type_node, fn, slot,
417
                                      call_expr_nargs (init),
418
                                      CALL_EXPR_ARGP (init));
419
      else
420
        rval = build_aggr_init_array (void_type_node, fn, slot,
421
                                      aggr_init_expr_nargs (init),
422
                                      AGGR_INIT_EXPR_ARGP (init));
423
      TREE_SIDE_EFFECTS (rval) = 1;
424
      AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
425
    }
426
  else
427
    rval = init;
428
 
429
  return rval;
430
}
431
 
432
/* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
433
   target.  TYPE is the type that this initialization should appear to
434
   have.
435
 
436
   Build an encapsulation of the initialization to perform
437
   and return it so that it can be processed by language-independent
438
   and language-specific expression expanders.  */
439
 
440
tree
441
build_cplus_new (tree type, tree init)
442
{
443
  tree rval = build_aggr_init_expr (type, init);
444
  tree slot;
445
 
446
  if (TREE_CODE (rval) == AGGR_INIT_EXPR)
447
    slot = AGGR_INIT_EXPR_SLOT (rval);
448
  else if (TREE_CODE (rval) == CALL_EXPR)
449
    slot = build_local_temp (type);
450
  else
451
    return rval;
452
 
453
  rval = build_target_expr (slot, rval);
454
  TARGET_EXPR_IMPLICIT_P (rval) = 1;
455
 
456
  return rval;
457
}
458
 
459
/* Return a TARGET_EXPR which expresses the direct-initialization of one
460
   array from another.  */
461
 
462
tree
463
build_array_copy (tree init)
464
{
465
  tree type = TREE_TYPE (init);
466
  tree slot = build_local_temp (type);
467
  init = build2 (VEC_INIT_EXPR, type, slot, init);
468
  SET_EXPR_LOCATION (init, input_location);
469
  init = build_target_expr (slot, init);
470
  TARGET_EXPR_IMPLICIT_P (init) = 1;
471
 
472
  return init;
473
}
474
 
475
/* Build a TARGET_EXPR using INIT to initialize a new temporary of the
476
   indicated TYPE.  */
477
 
478
tree
479
build_target_expr_with_type (tree init, tree type)
480
{
481
  gcc_assert (!VOID_TYPE_P (type));
482
 
483
  if (TREE_CODE (init) == TARGET_EXPR)
484
    return init;
485
  else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type)
486
           && !VOID_TYPE_P (TREE_TYPE (init))
487
           && TREE_CODE (init) != COND_EXPR
488
           && TREE_CODE (init) != CONSTRUCTOR
489
           && TREE_CODE (init) != VA_ARG_EXPR)
490
    /* We need to build up a copy constructor call.  A void initializer
491
       means we're being called from bot_manip.  COND_EXPR is a special
492
       case because we already have copies on the arms and we don't want
493
       another one here.  A CONSTRUCTOR is aggregate initialization, which
494
       is handled separately.  A VA_ARG_EXPR is magic creation of an
495
       aggregate; there's no additional work to be done.  */
496
    return force_rvalue (init);
497
 
498
  return force_target_expr (type, init);
499
}
500
 
501
/* Like the above function, but without the checking.  This function should
502
   only be used by code which is deliberately trying to subvert the type
503
   system, such as call_builtin_trap.  */
504
 
505
tree
506
force_target_expr (tree type, tree init)
507
{
508
  tree slot;
509
 
510
  gcc_assert (!VOID_TYPE_P (type));
511
 
512
  slot = build_local_temp (type);
513
  return build_target_expr (slot, init);
514
}
515
 
516
/* Like build_target_expr_with_type, but use the type of INIT.  */
517
 
518
tree
519
get_target_expr (tree init)
520
{
521
  if (TREE_CODE (init) == AGGR_INIT_EXPR)
522
    return build_target_expr (AGGR_INIT_EXPR_SLOT (init), init);
523
  else
524
    return build_target_expr_with_type (init, TREE_TYPE (init));
525
}
526
 
527
/* If EXPR is a bitfield reference, convert it to the declared type of
528
   the bitfield, and return the resulting expression.  Otherwise,
529
   return EXPR itself.  */
530
 
531
tree
532
convert_bitfield_to_declared_type (tree expr)
533
{
534
  tree bitfield_type;
535
 
536
  bitfield_type = is_bitfield_expr_with_lowered_type (expr);
537
  if (bitfield_type)
538
    expr = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type),
539
                               expr);
540
  return expr;
541
}
542
 
543
/* EXPR is being used in an rvalue context.  Return a version of EXPR
544
   that is marked as an rvalue.  */
545
 
546
tree
547
rvalue (tree expr)
548
{
549
  tree type;
550
 
551
  if (error_operand_p (expr))
552
    return expr;
553
 
554
  /* [basic.lval]
555
 
556
     Non-class rvalues always have cv-unqualified types.  */
557
  type = TREE_TYPE (expr);
558
  if (!CLASS_TYPE_P (type) && cv_qualified_p (type))
559
    type = cv_unqualified (type);
560
 
561
  /* We need to do this for rvalue refs as well to get the right answer
562
     from decltype; see c++/36628.  */
563
  if (!processing_template_decl && lvalue_or_rvalue_with_address_p (expr))
564
    expr = build1 (NON_LVALUE_EXPR, type, expr);
565
  else if (type != TREE_TYPE (expr))
566
    expr = build_nop (type, expr);
567
 
568
  return expr;
569
}
570
 
571
 
572
/* Hash an ARRAY_TYPE.  K is really of type `tree'.  */
573
 
574
static hashval_t
575
cplus_array_hash (const void* k)
576
{
577
  hashval_t hash;
578
  const_tree const t = (const_tree) k;
579
 
580
  hash = TYPE_UID (TREE_TYPE (t));
581
  if (TYPE_DOMAIN (t))
582
    hash ^= TYPE_UID (TYPE_DOMAIN (t));
583
  return hash;
584
}
585
 
586
typedef struct cplus_array_info {
587
  tree type;
588
  tree domain;
589
} cplus_array_info;
590
 
591
/* Compare two ARRAY_TYPEs.  K1 is really of type `tree', K2 is really
592
   of type `cplus_array_info*'. */
593
 
594
static int
595
cplus_array_compare (const void * k1, const void * k2)
596
{
597
  const_tree const t1 = (const_tree) k1;
598
  const cplus_array_info *const t2 = (const cplus_array_info*) k2;
599
 
600
  return (TREE_TYPE (t1) == t2->type && TYPE_DOMAIN (t1) == t2->domain);
601
}
602
 
603
/* Hash table containing dependent array types, which are unsuitable for
604
   the language-independent type hash table.  */
605
static GTY ((param_is (union tree_node))) htab_t cplus_array_htab;
606
 
607
/* Like build_array_type, but handle special C++ semantics.  */
608
 
609
tree
610
build_cplus_array_type (tree elt_type, tree index_type)
611
{
612
  tree t;
613
 
614
  if (elt_type == error_mark_node || index_type == error_mark_node)
615
    return error_mark_node;
616
 
617
  if (processing_template_decl
618
      && (dependent_type_p (elt_type)
619
          || (index_type && !TREE_CONSTANT (TYPE_MAX_VALUE (index_type)))))
620
    {
621
      void **e;
622
      cplus_array_info cai;
623
      hashval_t hash;
624
 
625
      if (cplus_array_htab == NULL)
626
        cplus_array_htab = htab_create_ggc (61, &cplus_array_hash,
627
                                            &cplus_array_compare, NULL);
628
 
629
      hash = TYPE_UID (elt_type);
630
      if (index_type)
631
        hash ^= TYPE_UID (index_type);
632
      cai.type = elt_type;
633
      cai.domain = index_type;
634
 
635
      e = htab_find_slot_with_hash (cplus_array_htab, &cai, hash, INSERT);
636
      if (*e)
637
        /* We have found the type: we're done.  */
638
        return (tree) *e;
639
      else
640
        {
641
          /* Build a new array type.  */
642
          t = cxx_make_type (ARRAY_TYPE);
643
          TREE_TYPE (t) = elt_type;
644
          TYPE_DOMAIN (t) = index_type;
645
 
646
          /* Store it in the hash table. */
647
          *e = t;
648
 
649
          /* Set the canonical type for this new node.  */
650
          if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
651
              || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
652
            SET_TYPE_STRUCTURAL_EQUALITY (t);
653
          else if (TYPE_CANONICAL (elt_type) != elt_type
654
                   || (index_type
655
                       && TYPE_CANONICAL (index_type) != index_type))
656
            TYPE_CANONICAL (t)
657
                = build_cplus_array_type
658
                   (TYPE_CANONICAL (elt_type),
659
                    index_type ? TYPE_CANONICAL (index_type) : index_type);
660
          else
661
            TYPE_CANONICAL (t) = t;
662
        }
663
    }
664
  else
665
    t = build_array_type (elt_type, index_type);
666
 
667
  /* We want TYPE_MAIN_VARIANT of an array to strip cv-quals from the
668
     element type as well, so fix it up if needed.  */
669
  if (elt_type != TYPE_MAIN_VARIANT (elt_type))
670
    {
671
      tree m = build_cplus_array_type (TYPE_MAIN_VARIANT (elt_type),
672
                                       index_type);
673
      if (TYPE_MAIN_VARIANT (t) != m)
674
        {
675
          TYPE_MAIN_VARIANT (t) = m;
676
          TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
677
          TYPE_NEXT_VARIANT (m) = t;
678
        }
679
    }
680
 
681
  /* Push these needs up so that initialization takes place
682
     more easily.  */
683
  TYPE_NEEDS_CONSTRUCTING (t)
684
    = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
685
  TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
686
    = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
687
  return t;
688
}
689
 
690
/* Return an ARRAY_TYPE with element type ELT and length N.  */
691
 
692
tree
693
build_array_of_n_type (tree elt, int n)
694
{
695
  return build_cplus_array_type (elt, build_index_type (size_int (n - 1)));
696
}
697
 
698
/* Return a reference type node referring to TO_TYPE.  If RVAL is
699
   true, return an rvalue reference type, otherwise return an lvalue
700
   reference type.  If a type node exists, reuse it, otherwise create
701
   a new one.  */
702
tree
703
cp_build_reference_type (tree to_type, bool rval)
704
{
705
  tree lvalue_ref, t;
706
  lvalue_ref = build_reference_type (to_type);
707
  if (!rval)
708
    return lvalue_ref;
709
 
710
  /* This code to create rvalue reference types is based on and tied
711
     to the code creating lvalue reference types in the middle-end
712
     functions build_reference_type_for_mode and build_reference_type.
713
 
714
     It works by putting the rvalue reference type nodes after the
715
     lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
716
     they will effectively be ignored by the middle end.  */
717
 
718
  for (t = lvalue_ref; (t = TYPE_NEXT_REF_TO (t)); )
719
    if (TYPE_REF_IS_RVALUE (t))
720
      return t;
721
 
722
  t = build_distinct_type_copy (lvalue_ref);
723
 
724
  TYPE_REF_IS_RVALUE (t) = true;
725
  TYPE_NEXT_REF_TO (t) = TYPE_NEXT_REF_TO (lvalue_ref);
726
  TYPE_NEXT_REF_TO (lvalue_ref) = t;
727
 
728
  if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
729
    SET_TYPE_STRUCTURAL_EQUALITY (t);
730
  else if (TYPE_CANONICAL (to_type) != to_type)
731
    TYPE_CANONICAL (t)
732
      = cp_build_reference_type (TYPE_CANONICAL (to_type), rval);
733
  else
734
    TYPE_CANONICAL (t) = t;
735
 
736
  layout_type (t);
737
 
738
  return t;
739
 
740
}
741
 
742
/* Returns EXPR cast to rvalue reference type, like std::move.  */
743
 
744
tree
745
move (tree expr)
746
{
747
  tree type = TREE_TYPE (expr);
748
  gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
749
  type = cp_build_reference_type (type, /*rval*/true);
750
  return build_static_cast (type, expr, tf_warning_or_error);
751
}
752
 
753
/* Used by the C++ front end to build qualified array types.  However,
754
   the C version of this function does not properly maintain canonical
755
   types (which are not used in C).  */
756
tree
757
c_build_qualified_type (tree type, int type_quals)
758
{
759
  return cp_build_qualified_type (type, type_quals);
760
}
761
 
762
 
763
/* Make a variant of TYPE, qualified with the TYPE_QUALS.  Handles
764
   arrays correctly.  In particular, if TYPE is an array of T's, and
765
   TYPE_QUALS is non-empty, returns an array of qualified T's.
766
 
767
   FLAGS determines how to deal with ill-formed qualifications. If
768
   tf_ignore_bad_quals is set, then bad qualifications are dropped
769
   (this is permitted if TYPE was introduced via a typedef or template
770
   type parameter). If bad qualifications are dropped and tf_warning
771
   is set, then a warning is issued for non-const qualifications.  If
772
   tf_ignore_bad_quals is not set and tf_error is not set, we
773
   return error_mark_node. Otherwise, we issue an error, and ignore
774
   the qualifications.
775
 
776
   Qualification of a reference type is valid when the reference came
777
   via a typedef or template type argument. [dcl.ref] No such
778
   dispensation is provided for qualifying a function type.  [dcl.fct]
779
   DR 295 queries this and the proposed resolution brings it into line
780
   with qualifying a reference.  We implement the DR.  We also behave
781
   in a similar manner for restricting non-pointer types.  */
782
 
783
tree
784
cp_build_qualified_type_real (tree type,
785
                              int type_quals,
786
                              tsubst_flags_t complain)
787
{
788
  tree result;
789
  int bad_quals = TYPE_UNQUALIFIED;
790
 
791
  if (type == error_mark_node)
792
    return type;
793
 
794
  if (type_quals == cp_type_quals (type))
795
    return type;
796
 
797
  if (TREE_CODE (type) == ARRAY_TYPE)
798
    {
799
      /* In C++, the qualification really applies to the array element
800
         type.  Obtain the appropriately qualified element type.  */
801
      tree t;
802
      tree element_type
803
        = cp_build_qualified_type_real (TREE_TYPE (type),
804
                                        type_quals,
805
                                        complain);
806
 
807
      if (element_type == error_mark_node)
808
        return error_mark_node;
809
 
810
      /* See if we already have an identically qualified type.  Tests
811
         should be equivalent to those in check_qualified_type.  */
812
      for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
813
        if (cp_type_quals (t) == type_quals
814
            && TYPE_NAME (t) == TYPE_NAME (type)
815
            && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
816
            && attribute_list_equal (TYPE_ATTRIBUTES (t),
817
                                     TYPE_ATTRIBUTES (type)))
818
          break;
819
 
820
      if (!t)
821
        {
822
          t = build_cplus_array_type (element_type, TYPE_DOMAIN (type));
823
 
824
          /* Keep the typedef name.  */
825
          if (TYPE_NAME (t) != TYPE_NAME (type))
826
            {
827
              t = build_variant_type_copy (t);
828
              TYPE_NAME (t) = TYPE_NAME (type);
829
            }
830
        }
831
 
832
      /* Even if we already had this variant, we update
833
         TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
834
         they changed since the variant was originally created.
835
 
836
         This seems hokey; if there is some way to use a previous
837
         variant *without* coming through here,
838
         TYPE_NEEDS_CONSTRUCTING will never be updated.  */
839
      TYPE_NEEDS_CONSTRUCTING (t)
840
        = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
841
      TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
842
        = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
843
      return t;
844
    }
845
  else if (TYPE_PTRMEMFUNC_P (type))
846
    {
847
      /* For a pointer-to-member type, we can't just return a
848
         cv-qualified version of the RECORD_TYPE.  If we do, we
849
         haven't changed the field that contains the actual pointer to
850
         a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong.  */
851
      tree t;
852
 
853
      t = TYPE_PTRMEMFUNC_FN_TYPE (type);
854
      t = cp_build_qualified_type_real (t, type_quals, complain);
855
      return build_ptrmemfunc_type (t);
856
    }
857
  else if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
858
    {
859
      tree t = PACK_EXPANSION_PATTERN (type);
860
 
861
      t = cp_build_qualified_type_real (t, type_quals, complain);
862
      return make_pack_expansion (t);
863
    }
864
 
865
  /* A reference or method type shall not be cv-qualified.
866
     [dcl.ref], [dcl.fct]  */
867
  if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
868
      && (TREE_CODE (type) == REFERENCE_TYPE
869
          || TREE_CODE (type) == METHOD_TYPE))
870
    {
871
      bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
872
      type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
873
    }
874
 
875
  /* A restrict-qualified type must be a pointer (or reference)
876
     to object or incomplete type. */
877
  if ((type_quals & TYPE_QUAL_RESTRICT)
878
      && TREE_CODE (type) != TEMPLATE_TYPE_PARM
879
      && TREE_CODE (type) != TYPENAME_TYPE
880
      && !POINTER_TYPE_P (type))
881
    {
882
      bad_quals |= TYPE_QUAL_RESTRICT;
883
      type_quals &= ~TYPE_QUAL_RESTRICT;
884
    }
885
 
886
  if (bad_quals == TYPE_UNQUALIFIED)
887
    /*OK*/;
888
  else if (!(complain & (tf_error | tf_ignore_bad_quals)))
889
    return error_mark_node;
890
  else
891
    {
892
      if (complain & tf_ignore_bad_quals)
893
        /* We're not going to warn about constifying things that can't
894
           be constified.  */
895
        bad_quals &= ~TYPE_QUAL_CONST;
896
      if (bad_quals)
897
        {
898
          tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
899
 
900
          if (!(complain & tf_ignore_bad_quals))
901
            error ("%qV qualifiers cannot be applied to %qT",
902
                   bad_type, type);
903
        }
904
    }
905
 
906
  /* Retrieve (or create) the appropriately qualified variant.  */
907
  result = build_qualified_type (type, type_quals);
908
 
909
  /* If this was a pointer-to-method type, and we just made a copy,
910
     then we need to unshare the record that holds the cached
911
     pointer-to-member-function type, because these will be distinct
912
     between the unqualified and qualified types.  */
913
  if (result != type
914
      && TREE_CODE (type) == POINTER_TYPE
915
      && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE
916
      && TYPE_LANG_SPECIFIC (result) == TYPE_LANG_SPECIFIC (type))
917
    TYPE_LANG_SPECIFIC (result) = NULL;
918
 
919
  /* We may also have ended up building a new copy of the canonical
920
     type of a pointer-to-method type, which could have the same
921
     sharing problem described above.  */
922
  if (TYPE_CANONICAL (result) != TYPE_CANONICAL (type)
923
      && TREE_CODE (type) == POINTER_TYPE
924
      && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE
925
      && (TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result))
926
          == TYPE_LANG_SPECIFIC (TYPE_CANONICAL (type))))
927
    TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result)) = NULL;
928
 
929
  return result;
930
}
931
 
932
/* Return TYPE with const and volatile removed.  */
933
 
934
tree
935
cv_unqualified (tree type)
936
{
937
  int quals = TYPE_QUALS (type);
938
  quals &= ~(TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE);
939
  return cp_build_qualified_type (type, quals);
940
}
941
 
942
/* Builds a qualified variant of T that is not a typedef variant.
943
   E.g. consider the following declarations:
944
     typedef const int ConstInt;
945
     typedef ConstInt* PtrConstInt;
946
   If T is PtrConstInt, this function returns a type representing
947
     const int*.
948
   In other words, if T is a typedef, the function returns the underlying type.
949
   The cv-qualification and attributes of the type returned match the
950
   input type.
951
   They will always be compatible types.
952
   The returned type is built so that all of its subtypes
953
   recursively have their typedefs stripped as well.
954
 
955
   This is different from just returning TYPE_CANONICAL (T)
956
   Because of several reasons:
957
    * If T is a type that needs structural equality
958
      its TYPE_CANONICAL (T) will be NULL.
959
    * TYPE_CANONICAL (T) desn't carry type attributes
960
      and looses template parameter names.   */
961
 
962
tree
963
strip_typedefs (tree t)
964
{
965
  tree result = NULL, type = NULL, t0 = NULL;
966
 
967
  if (!t || t == error_mark_node || t == TYPE_CANONICAL (t))
968
    return t;
969
 
970
  gcc_assert (TYPE_P (t));
971
 
972
  switch (TREE_CODE (t))
973
    {
974
    case POINTER_TYPE:
975
      type = strip_typedefs (TREE_TYPE (t));
976
      result = build_pointer_type (type);
977
      break;
978
    case REFERENCE_TYPE:
979
      type = strip_typedefs (TREE_TYPE (t));
980
      result = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
981
      break;
982
    case OFFSET_TYPE:
983
      t0 = strip_typedefs (TYPE_OFFSET_BASETYPE (t));
984
      type = strip_typedefs (TREE_TYPE (t));
985
      result = build_offset_type (t0, type);
986
      break;
987
    case RECORD_TYPE:
988
      if (TYPE_PTRMEMFUNC_P (t))
989
        {
990
          t0 = strip_typedefs (TYPE_PTRMEMFUNC_FN_TYPE (t));
991
          result = build_ptrmemfunc_type (t0);
992
        }
993
      break;
994
    case ARRAY_TYPE:
995
      type = strip_typedefs (TREE_TYPE (t));
996
      t0  = strip_typedefs (TYPE_DOMAIN (t));;
997
      result = build_cplus_array_type (type, t0);
998
      break;
999
    case FUNCTION_TYPE:
1000
    case METHOD_TYPE:
1001
      {
1002
        tree arg_types = NULL, arg_node, arg_type;
1003
        for (arg_node = TYPE_ARG_TYPES (t);
1004
             arg_node;
1005
             arg_node = TREE_CHAIN (arg_node))
1006
          {
1007
            if (arg_node == void_list_node)
1008
              break;
1009
            arg_type = strip_typedefs (TREE_VALUE (arg_node));
1010
            gcc_assert (arg_type);
1011
 
1012
            arg_types =
1013
              tree_cons (TREE_PURPOSE (arg_node), arg_type, arg_types);
1014
          }
1015
 
1016
        if (arg_types)
1017
          arg_types = nreverse (arg_types);
1018
 
1019
        /* A list of parameters not ending with an ellipsis
1020
           must end with void_list_node.  */
1021
        if (arg_node)
1022
          arg_types = chainon (arg_types, void_list_node);
1023
 
1024
        type = strip_typedefs (TREE_TYPE (t));
1025
        if (TREE_CODE (t) == METHOD_TYPE)
1026
          {
1027
            tree class_type = TREE_TYPE (TREE_VALUE (arg_types));
1028
            gcc_assert (class_type);
1029
            result =
1030
              build_method_type_directly (class_type, type,
1031
                                          TREE_CHAIN (arg_types));
1032
          }
1033
        else
1034
            result = build_function_type (type,
1035
                                          arg_types);
1036
 
1037
        if (TYPE_RAISES_EXCEPTIONS (t))
1038
          result = build_exception_variant (result,
1039
                                            TYPE_RAISES_EXCEPTIONS (t));
1040
      }
1041
      break;
1042
    default:
1043
      break;
1044
    }
1045
 
1046
  if (!result)
1047
      result = TYPE_MAIN_VARIANT (t);
1048
  if (TYPE_ATTRIBUTES (t))
1049
    result = cp_build_type_attribute_variant (result, TYPE_ATTRIBUTES (t));
1050
  return cp_build_qualified_type (result, cp_type_quals (t));
1051
}
1052
 
1053
/* Returns true iff TYPE is a type variant created for a typedef. */
1054
 
1055
bool
1056
typedef_variant_p (tree type)
1057
{
1058
  return is_typedef_decl (TYPE_NAME (type));
1059
}
1060
 
1061
/* Setup a TYPE_DECL node as a typedef representation.
1062
   See comments of set_underlying_type in c-common.c.  */
1063
 
1064
void
1065
cp_set_underlying_type (tree t)
1066
{
1067
  set_underlying_type (t);
1068
  /* If T is a template type parm, make it require structural equality.
1069
     This is useful when comparing two template type parms,
1070
     because it forces the comparison of the template parameters of their
1071
     decls.  */
1072
  if (TREE_CODE (TREE_TYPE (t)) == TEMPLATE_TYPE_PARM)
1073
    SET_TYPE_STRUCTURAL_EQUALITY (TREE_TYPE (t));
1074
}
1075
 
1076
 
1077
/* Makes a copy of BINFO and TYPE, which is to be inherited into a
1078
   graph dominated by T.  If BINFO is NULL, TYPE is a dependent base,
1079
   and we do a shallow copy.  If BINFO is non-NULL, we do a deep copy.
1080
   VIRT indicates whether TYPE is inherited virtually or not.
1081
   IGO_PREV points at the previous binfo of the inheritance graph
1082
   order chain.  The newly copied binfo's TREE_CHAIN forms this
1083
   ordering.
1084
 
1085
   The CLASSTYPE_VBASECLASSES vector of T is constructed in the
1086
   correct order. That is in the order the bases themselves should be
1087
   constructed in.
1088
 
1089
   The BINFO_INHERITANCE of a virtual base class points to the binfo
1090
   of the most derived type. ??? We could probably change this so that
1091
   BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
1092
   remove a field.  They currently can only differ for primary virtual
1093
   virtual bases.  */
1094
 
1095
tree
1096
copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
1097
{
1098
  tree new_binfo;
1099
 
1100
  if (virt)
1101
    {
1102
      /* See if we've already made this virtual base.  */
1103
      new_binfo = binfo_for_vbase (type, t);
1104
      if (new_binfo)
1105
        return new_binfo;
1106
    }
1107
 
1108
  new_binfo = make_tree_binfo (binfo ? BINFO_N_BASE_BINFOS (binfo) : 0);
1109
  BINFO_TYPE (new_binfo) = type;
1110
 
1111
  /* Chain it into the inheritance graph.  */
1112
  TREE_CHAIN (*igo_prev) = new_binfo;
1113
  *igo_prev = new_binfo;
1114
 
1115
  if (binfo)
1116
    {
1117
      int ix;
1118
      tree base_binfo;
1119
 
1120
      gcc_assert (!BINFO_DEPENDENT_BASE_P (binfo));
1121
      gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), type));
1122
 
1123
      BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
1124
      BINFO_VIRTUALS (new_binfo) = BINFO_VIRTUALS (binfo);
1125
 
1126
      /* We do not need to copy the accesses, as they are read only.  */
1127
      BINFO_BASE_ACCESSES (new_binfo) = BINFO_BASE_ACCESSES (binfo);
1128
 
1129
      /* Recursively copy base binfos of BINFO.  */
1130
      for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1131
        {
1132
          tree new_base_binfo;
1133
 
1134
          gcc_assert (!BINFO_DEPENDENT_BASE_P (base_binfo));
1135
          new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
1136
                                       t, igo_prev,
1137
                                       BINFO_VIRTUAL_P (base_binfo));
1138
 
1139
          if (!BINFO_INHERITANCE_CHAIN (new_base_binfo))
1140
            BINFO_INHERITANCE_CHAIN (new_base_binfo) = new_binfo;
1141
          BINFO_BASE_APPEND (new_binfo, new_base_binfo);
1142
        }
1143
    }
1144
  else
1145
    BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
1146
 
1147
  if (virt)
1148
    {
1149
      /* Push it onto the list after any virtual bases it contains
1150
         will have been pushed.  */
1151
      VEC_quick_push (tree, CLASSTYPE_VBASECLASSES (t), new_binfo);
1152
      BINFO_VIRTUAL_P (new_binfo) = 1;
1153
      BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
1154
    }
1155
 
1156
  return new_binfo;
1157
}
1158
 
1159
/* Hashing of lists so that we don't make duplicates.
1160
   The entry point is `list_hash_canon'.  */
1161
 
1162
/* Now here is the hash table.  When recording a list, it is added
1163
   to the slot whose index is the hash code mod the table size.
1164
   Note that the hash table is used for several kinds of lists.
1165
   While all these live in the same table, they are completely independent,
1166
   and the hash code is computed differently for each of these.  */
1167
 
1168
static GTY ((param_is (union tree_node))) htab_t list_hash_table;
1169
 
1170
struct list_proxy
1171
{
1172
  tree purpose;
1173
  tree value;
1174
  tree chain;
1175
};
1176
 
1177
/* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
1178
   for a node we are thinking about adding).  */
1179
 
1180
static int
1181
list_hash_eq (const void* entry, const void* data)
1182
{
1183
  const_tree const t = (const_tree) entry;
1184
  const struct list_proxy *const proxy = (const struct list_proxy *) data;
1185
 
1186
  return (TREE_VALUE (t) == proxy->value
1187
          && TREE_PURPOSE (t) == proxy->purpose
1188
          && TREE_CHAIN (t) == proxy->chain);
1189
}
1190
 
1191
/* Compute a hash code for a list (chain of TREE_LIST nodes
1192
   with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
1193
   TREE_COMMON slots), by adding the hash codes of the individual entries.  */
1194
 
1195
static hashval_t
1196
list_hash_pieces (tree purpose, tree value, tree chain)
1197
{
1198
  hashval_t hashcode = 0;
1199
 
1200
  if (chain)
1201
    hashcode += TREE_HASH (chain);
1202
 
1203
  if (value)
1204
    hashcode += TREE_HASH (value);
1205
  else
1206
    hashcode += 1007;
1207
  if (purpose)
1208
    hashcode += TREE_HASH (purpose);
1209
  else
1210
    hashcode += 1009;
1211
  return hashcode;
1212
}
1213
 
1214
/* Hash an already existing TREE_LIST.  */
1215
 
1216
static hashval_t
1217
list_hash (const void* p)
1218
{
1219
  const_tree const t = (const_tree) p;
1220
  return list_hash_pieces (TREE_PURPOSE (t),
1221
                           TREE_VALUE (t),
1222
                           TREE_CHAIN (t));
1223
}
1224
 
1225
/* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1226
   object for an identical list if one already exists.  Otherwise, build a
1227
   new one, and record it as the canonical object.  */
1228
 
1229
tree
1230
hash_tree_cons (tree purpose, tree value, tree chain)
1231
{
1232
  int hashcode = 0;
1233
  void **slot;
1234
  struct list_proxy proxy;
1235
 
1236
  /* Hash the list node.  */
1237
  hashcode = list_hash_pieces (purpose, value, chain);
1238
  /* Create a proxy for the TREE_LIST we would like to create.  We
1239
     don't actually create it so as to avoid creating garbage.  */
1240
  proxy.purpose = purpose;
1241
  proxy.value = value;
1242
  proxy.chain = chain;
1243
  /* See if it is already in the table.  */
1244
  slot = htab_find_slot_with_hash (list_hash_table, &proxy, hashcode,
1245
                                   INSERT);
1246
  /* If not, create a new node.  */
1247
  if (!*slot)
1248
    *slot = tree_cons (purpose, value, chain);
1249
  return (tree) *slot;
1250
}
1251
 
1252
/* Constructor for hashed lists.  */
1253
 
1254
tree
1255
hash_tree_chain (tree value, tree chain)
1256
{
1257
  return hash_tree_cons (NULL_TREE, value, chain);
1258
}
1259
 
1260
void
1261
debug_binfo (tree elem)
1262
{
1263
  HOST_WIDE_INT n;
1264
  tree virtuals;
1265
 
1266
  fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
1267
           "\nvtable type:\n",
1268
           TYPE_NAME_STRING (BINFO_TYPE (elem)),
1269
           TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1270
  debug_tree (BINFO_TYPE (elem));
1271
  if (BINFO_VTABLE (elem))
1272
    fprintf (stderr, "vtable decl \"%s\"\n",
1273
             IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
1274
  else
1275
    fprintf (stderr, "no vtable decl yet\n");
1276
  fprintf (stderr, "virtuals:\n");
1277
  virtuals = BINFO_VIRTUALS (elem);
1278
  n = 0;
1279
 
1280
  while (virtuals)
1281
    {
1282
      tree fndecl = TREE_VALUE (virtuals);
1283
      fprintf (stderr, "%s [%ld =? %ld]\n",
1284
               IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1285
               (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1286
      ++n;
1287
      virtuals = TREE_CHAIN (virtuals);
1288
    }
1289
}
1290
 
1291
/* Build a representation for the qualified name SCOPE::NAME.  TYPE is
1292
   the type of the result expression, if known, or NULL_TREE if the
1293
   resulting expression is type-dependent.  If TEMPLATE_P is true,
1294
   NAME is known to be a template because the user explicitly used the
1295
   "template" keyword after the "::".
1296
 
1297
   All SCOPE_REFs should be built by use of this function.  */
1298
 
1299
tree
1300
build_qualified_name (tree type, tree scope, tree name, bool template_p)
1301
{
1302
  tree t;
1303
  if (type == error_mark_node
1304
      || scope == error_mark_node
1305
      || name == error_mark_node)
1306
    return error_mark_node;
1307
  t = build2 (SCOPE_REF, type, scope, name);
1308
  QUALIFIED_NAME_IS_TEMPLATE (t) = template_p;
1309
  if (type)
1310
    t = convert_from_reference (t);
1311
  return t;
1312
}
1313
 
1314
/* Returns nonzero if X is an expression for a (possibly overloaded)
1315
   function.  If "f" is a function or function template, "f", "c->f",
1316
   "c.f", "C::f", and "f<int>" will all be considered possibly
1317
   overloaded functions.  Returns 2 if the function is actually
1318
   overloaded, i.e., if it is impossible to know the type of the
1319
   function without performing overload resolution.  */
1320
 
1321
int
1322
is_overloaded_fn (tree x)
1323
{
1324
  /* A baselink is also considered an overloaded function.  */
1325
  if (TREE_CODE (x) == OFFSET_REF
1326
      || TREE_CODE (x) == COMPONENT_REF)
1327
    x = TREE_OPERAND (x, 1);
1328
  if (BASELINK_P (x))
1329
    x = BASELINK_FUNCTIONS (x);
1330
  if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
1331
    x = TREE_OPERAND (x, 0);
1332
  if (DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
1333
      || (TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x)))
1334
    return 2;
1335
  return  (TREE_CODE (x) == FUNCTION_DECL
1336
           || TREE_CODE (x) == OVERLOAD);
1337
}
1338
 
1339
/* Returns true iff X is an expression for an overloaded function
1340
   whose type cannot be known without performing overload
1341
   resolution.  */
1342
 
1343
bool
1344
really_overloaded_fn (tree x)
1345
{
1346
  return is_overloaded_fn (x) == 2;
1347
}
1348
 
1349
tree
1350
get_first_fn (tree from)
1351
{
1352
  gcc_assert (is_overloaded_fn (from));
1353
  /* A baselink is also considered an overloaded function.  */
1354
  if (TREE_CODE (from) == OFFSET_REF
1355
      || TREE_CODE (from) == COMPONENT_REF)
1356
    from = TREE_OPERAND (from, 1);
1357
  if (BASELINK_P (from))
1358
    from = BASELINK_FUNCTIONS (from);
1359
  if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
1360
    from = TREE_OPERAND (from, 0);
1361
  return OVL_CURRENT (from);
1362
}
1363
 
1364
/* Return a new OVL node, concatenating it with the old one.  */
1365
 
1366
tree
1367
ovl_cons (tree decl, tree chain)
1368
{
1369
  tree result = make_node (OVERLOAD);
1370
  TREE_TYPE (result) = unknown_type_node;
1371
  OVL_FUNCTION (result) = decl;
1372
  TREE_CHAIN (result) = chain;
1373
 
1374
  return result;
1375
}
1376
 
1377
/* Build a new overloaded function. If this is the first one,
1378
   just return it; otherwise, ovl_cons the _DECLs */
1379
 
1380
tree
1381
build_overload (tree decl, tree chain)
1382
{
1383
  if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
1384
    return decl;
1385
  if (chain && TREE_CODE (chain) != OVERLOAD)
1386
    chain = ovl_cons (chain, NULL_TREE);
1387
  return ovl_cons (decl, chain);
1388
}
1389
 
1390
 
1391
#define PRINT_RING_SIZE 4
1392
 
1393
static const char *
1394
cxx_printable_name_internal (tree decl, int v, bool translate)
1395
{
1396
  static unsigned int uid_ring[PRINT_RING_SIZE];
1397
  static char *print_ring[PRINT_RING_SIZE];
1398
  static bool trans_ring[PRINT_RING_SIZE];
1399
  static int ring_counter;
1400
  int i;
1401
 
1402
  /* Only cache functions.  */
1403
  if (v < 2
1404
      || TREE_CODE (decl) != FUNCTION_DECL
1405
      || DECL_LANG_SPECIFIC (decl) == 0)
1406
    return lang_decl_name (decl, v, translate);
1407
 
1408
  /* See if this print name is lying around.  */
1409
  for (i = 0; i < PRINT_RING_SIZE; i++)
1410
    if (uid_ring[i] == DECL_UID (decl) && translate == trans_ring[i])
1411
      /* yes, so return it.  */
1412
      return print_ring[i];
1413
 
1414
  if (++ring_counter == PRINT_RING_SIZE)
1415
    ring_counter = 0;
1416
 
1417
  if (current_function_decl != NULL_TREE)
1418
    {
1419
      /* There may be both translated and untranslated versions of the
1420
         name cached.  */
1421
      for (i = 0; i < 2; i++)
1422
        {
1423
          if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
1424
            ring_counter += 1;
1425
          if (ring_counter == PRINT_RING_SIZE)
1426
            ring_counter = 0;
1427
        }
1428
      gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
1429
    }
1430
 
1431
  if (print_ring[ring_counter])
1432
    free (print_ring[ring_counter]);
1433
 
1434
  print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate));
1435
  uid_ring[ring_counter] = DECL_UID (decl);
1436
  trans_ring[ring_counter] = translate;
1437
  return print_ring[ring_counter];
1438
}
1439
 
1440
const char *
1441
cxx_printable_name (tree decl, int v)
1442
{
1443
  return cxx_printable_name_internal (decl, v, false);
1444
}
1445
 
1446
const char *
1447
cxx_printable_name_translate (tree decl, int v)
1448
{
1449
  return cxx_printable_name_internal (decl, v, true);
1450
}
1451
 
1452
/* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1453
   listed in RAISES.  */
1454
 
1455
tree
1456
build_exception_variant (tree type, tree raises)
1457
{
1458
  tree v = TYPE_MAIN_VARIANT (type);
1459
  int type_quals = TYPE_QUALS (type);
1460
 
1461
  for (; v; v = TYPE_NEXT_VARIANT (v))
1462
    if (check_qualified_type (v, type, type_quals)
1463
        && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
1464
      return v;
1465
 
1466
  /* Need to build a new variant.  */
1467
  v = build_variant_type_copy (type);
1468
  TYPE_RAISES_EXCEPTIONS (v) = raises;
1469
  return v;
1470
}
1471
 
1472
/* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
1473
   BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1474
   arguments.  */
1475
 
1476
tree
1477
bind_template_template_parm (tree t, tree newargs)
1478
{
1479
  tree decl = TYPE_NAME (t);
1480
  tree t2;
1481
 
1482
  t2 = cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM);
1483
  decl = build_decl (input_location,
1484
                     TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1485
 
1486
  /* These nodes have to be created to reflect new TYPE_DECL and template
1487
     arguments.  */
1488
  TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
1489
  TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
1490
  TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1491
    = build_template_info (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t), newargs);
1492
 
1493
  TREE_TYPE (decl) = t2;
1494
  TYPE_NAME (t2) = decl;
1495
  TYPE_STUB_DECL (t2) = decl;
1496
  TYPE_SIZE (t2) = 0;
1497
  SET_TYPE_STRUCTURAL_EQUALITY (t2);
1498
 
1499
  return t2;
1500
}
1501
 
1502
/* Called from count_trees via walk_tree.  */
1503
 
1504
static tree
1505
count_trees_r (tree *tp, int *walk_subtrees, void *data)
1506
{
1507
  ++*((int *) data);
1508
 
1509
  if (TYPE_P (*tp))
1510
    *walk_subtrees = 0;
1511
 
1512
  return NULL_TREE;
1513
}
1514
 
1515
/* Debugging function for measuring the rough complexity of a tree
1516
   representation.  */
1517
 
1518
int
1519
count_trees (tree t)
1520
{
1521
  int n_trees = 0;
1522
  cp_walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
1523
  return n_trees;
1524
}
1525
 
1526
/* Called from verify_stmt_tree via walk_tree.  */
1527
 
1528
static tree
1529
verify_stmt_tree_r (tree* tp,
1530
                    int* walk_subtrees ATTRIBUTE_UNUSED ,
1531
                    void* data)
1532
{
1533
  tree t = *tp;
1534
  htab_t *statements = (htab_t *) data;
1535
  void **slot;
1536
 
1537
  if (!STATEMENT_CODE_P (TREE_CODE (t)))
1538
    return NULL_TREE;
1539
 
1540
  /* If this statement is already present in the hash table, then
1541
     there is a circularity in the statement tree.  */
1542
  gcc_assert (!htab_find (*statements, t));
1543
 
1544
  slot = htab_find_slot (*statements, t, INSERT);
1545
  *slot = t;
1546
 
1547
  return NULL_TREE;
1548
}
1549
 
1550
/* Debugging function to check that the statement T has not been
1551
   corrupted.  For now, this function simply checks that T contains no
1552
   circularities.  */
1553
 
1554
void
1555
verify_stmt_tree (tree t)
1556
{
1557
  htab_t statements;
1558
  statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
1559
  cp_walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
1560
  htab_delete (statements);
1561
}
1562
 
1563
/* Check if the type T depends on a type with no linkage and if so, return
1564
   it.  If RELAXED_P then do not consider a class type declared within
1565
   a vague-linkage function to have no linkage.  */
1566
 
1567
tree
1568
no_linkage_check (tree t, bool relaxed_p)
1569
{
1570
  tree r;
1571
 
1572
  /* There's no point in checking linkage on template functions; we
1573
     can't know their complete types.  */
1574
  if (processing_template_decl)
1575
    return NULL_TREE;
1576
 
1577
  switch (TREE_CODE (t))
1578
    {
1579
    case RECORD_TYPE:
1580
      if (TYPE_PTRMEMFUNC_P (t))
1581
        goto ptrmem;
1582
      /* Lambda types that don't have mangling scope have no linkage.  We
1583
         check CLASSTYPE_LAMBDA_EXPR here rather than LAMBDA_TYPE_P because
1584
         when we get here from pushtag none of the lambda information is
1585
         set up yet, so we want to assume that the lambda has linkage and
1586
         fix it up later if not.  */
1587
      if (CLASSTYPE_LAMBDA_EXPR (t)
1588
          && LAMBDA_TYPE_EXTRA_SCOPE (t) == NULL_TREE)
1589
        return t;
1590
      /* Fall through.  */
1591
    case UNION_TYPE:
1592
      if (!CLASS_TYPE_P (t))
1593
        return NULL_TREE;
1594
      /* Fall through.  */
1595
    case ENUMERAL_TYPE:
1596
      /* Only treat anonymous types as having no linkage if they're at
1597
         namespace scope.  This is core issue 966.  */
1598
      if (TYPE_ANONYMOUS_P (t) && TYPE_NAMESPACE_SCOPE_P (t))
1599
        return t;
1600
 
1601
      for (r = CP_TYPE_CONTEXT (t); ; )
1602
        {
1603
          /* If we're a nested type of a !TREE_PUBLIC class, we might not
1604
             have linkage, or we might just be in an anonymous namespace.
1605
             If we're in a TREE_PUBLIC class, we have linkage.  */
1606
          if (TYPE_P (r) && !TREE_PUBLIC (TYPE_NAME (r)))
1607
            return no_linkage_check (TYPE_CONTEXT (t), relaxed_p);
1608
          else if (TREE_CODE (r) == FUNCTION_DECL)
1609
            {
1610
              if (!relaxed_p || !vague_linkage_p (r))
1611
                return t;
1612
              else
1613
                r = CP_DECL_CONTEXT (r);
1614
            }
1615
          else
1616
            break;
1617
        }
1618
 
1619
      return NULL_TREE;
1620
 
1621
    case ARRAY_TYPE:
1622
    case POINTER_TYPE:
1623
    case REFERENCE_TYPE:
1624
      return no_linkage_check (TREE_TYPE (t), relaxed_p);
1625
 
1626
    case OFFSET_TYPE:
1627
    ptrmem:
1628
      r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
1629
                            relaxed_p);
1630
      if (r)
1631
        return r;
1632
      return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
1633
 
1634
    case METHOD_TYPE:
1635
      r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
1636
      if (r)
1637
        return r;
1638
      /* Fall through.  */
1639
    case FUNCTION_TYPE:
1640
      {
1641
        tree parm;
1642
        for (parm = TYPE_ARG_TYPES (t);
1643
             parm && parm != void_list_node;
1644
             parm = TREE_CHAIN (parm))
1645
          {
1646
            r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
1647
            if (r)
1648
              return r;
1649
          }
1650
        return no_linkage_check (TREE_TYPE (t), relaxed_p);
1651
      }
1652
 
1653
    default:
1654
      return NULL_TREE;
1655
    }
1656
}
1657
 
1658
#ifdef GATHER_STATISTICS
1659
extern int depth_reached;
1660
#endif
1661
 
1662
void
1663
cxx_print_statistics (void)
1664
{
1665
  print_search_statistics ();
1666
  print_class_statistics ();
1667
#ifdef GATHER_STATISTICS
1668
  fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1669
           depth_reached);
1670
#endif
1671
}
1672
 
1673
/* Return, as an INTEGER_CST node, the number of elements for TYPE
1674
   (which is an ARRAY_TYPE).  This counts only elements of the top
1675
   array.  */
1676
 
1677
tree
1678
array_type_nelts_top (tree type)
1679
{
1680
  return fold_build2_loc (input_location,
1681
                      PLUS_EXPR, sizetype,
1682
                      array_type_nelts (type),
1683
                      size_one_node);
1684
}
1685
 
1686
/* Return, as an INTEGER_CST node, the number of elements for TYPE
1687
   (which is an ARRAY_TYPE).  This one is a recursive count of all
1688
   ARRAY_TYPEs that are clumped together.  */
1689
 
1690
tree
1691
array_type_nelts_total (tree type)
1692
{
1693
  tree sz = array_type_nelts_top (type);
1694
  type = TREE_TYPE (type);
1695
  while (TREE_CODE (type) == ARRAY_TYPE)
1696
    {
1697
      tree n = array_type_nelts_top (type);
1698
      sz = fold_build2_loc (input_location,
1699
                        MULT_EXPR, sizetype, sz, n);
1700
      type = TREE_TYPE (type);
1701
    }
1702
  return sz;
1703
}
1704
 
1705
/* Called from break_out_target_exprs via mapcar.  */
1706
 
1707
static tree
1708
bot_manip (tree* tp, int* walk_subtrees, void* data)
1709
{
1710
  splay_tree target_remap = ((splay_tree) data);
1711
  tree t = *tp;
1712
 
1713
  if (!TYPE_P (t) && TREE_CONSTANT (t))
1714
    {
1715
      /* There can't be any TARGET_EXPRs or their slot variables below
1716
         this point.  We used to check !TREE_SIDE_EFFECTS, but then we
1717
         failed to copy an ADDR_EXPR of the slot VAR_DECL.  */
1718
      *walk_subtrees = 0;
1719
      return NULL_TREE;
1720
    }
1721
  if (TREE_CODE (t) == TARGET_EXPR)
1722
    {
1723
      tree u;
1724
 
1725
      if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
1726
        u = build_cplus_new (TREE_TYPE (t), TREE_OPERAND (t, 1));
1727
      else
1728
        u = build_target_expr_with_type (TREE_OPERAND (t, 1), TREE_TYPE (t));
1729
 
1730
      /* Map the old variable to the new one.  */
1731
      splay_tree_insert (target_remap,
1732
                         (splay_tree_key) TREE_OPERAND (t, 0),
1733
                         (splay_tree_value) TREE_OPERAND (u, 0));
1734
 
1735
      TREE_OPERAND (u, 1) = break_out_target_exprs (TREE_OPERAND (u, 1));
1736
 
1737
      /* Replace the old expression with the new version.  */
1738
      *tp = u;
1739
      /* We don't have to go below this point; the recursive call to
1740
         break_out_target_exprs will have handled anything below this
1741
         point.  */
1742
      *walk_subtrees = 0;
1743
      return NULL_TREE;
1744
    }
1745
 
1746
  /* Make a copy of this node.  */
1747
  return copy_tree_r (tp, walk_subtrees, NULL);
1748
}
1749
 
1750
/* Replace all remapped VAR_DECLs in T with their new equivalents.
1751
   DATA is really a splay-tree mapping old variables to new
1752
   variables.  */
1753
 
1754
static tree
1755
bot_replace (tree* t,
1756
             int* walk_subtrees ATTRIBUTE_UNUSED ,
1757
             void* data)
1758
{
1759
  splay_tree target_remap = ((splay_tree) data);
1760
 
1761
  if (TREE_CODE (*t) == VAR_DECL)
1762
    {
1763
      splay_tree_node n = splay_tree_lookup (target_remap,
1764
                                             (splay_tree_key) *t);
1765
      if (n)
1766
        *t = (tree) n->value;
1767
    }
1768
 
1769
  return NULL_TREE;
1770
}
1771
 
1772
/* When we parse a default argument expression, we may create
1773
   temporary variables via TARGET_EXPRs.  When we actually use the
1774
   default-argument expression, we make a copy of the expression, but
1775
   we must replace the temporaries with appropriate local versions.  */
1776
 
1777
tree
1778
break_out_target_exprs (tree t)
1779
{
1780
  static int target_remap_count;
1781
  static splay_tree target_remap;
1782
 
1783
  if (!target_remap_count++)
1784
    target_remap = splay_tree_new (splay_tree_compare_pointers,
1785
                                   /*splay_tree_delete_key_fn=*/NULL,
1786
                                   /*splay_tree_delete_value_fn=*/NULL);
1787
  cp_walk_tree (&t, bot_manip, target_remap, NULL);
1788
  cp_walk_tree (&t, bot_replace, target_remap, NULL);
1789
 
1790
  if (!--target_remap_count)
1791
    {
1792
      splay_tree_delete (target_remap);
1793
      target_remap = NULL;
1794
    }
1795
 
1796
  return t;
1797
}
1798
 
1799
/* Similar to `build_nt', but for template definitions of dependent
1800
   expressions  */
1801
 
1802
tree
1803
build_min_nt (enum tree_code code, ...)
1804
{
1805
  tree t;
1806
  int length;
1807
  int i;
1808
  va_list p;
1809
 
1810
  gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1811
 
1812
  va_start (p, code);
1813
 
1814
  t = make_node (code);
1815
  length = TREE_CODE_LENGTH (code);
1816
 
1817
  for (i = 0; i < length; i++)
1818
    {
1819
      tree x = va_arg (p, tree);
1820
      TREE_OPERAND (t, i) = x;
1821
    }
1822
 
1823
  va_end (p);
1824
  return t;
1825
}
1826
 
1827
 
1828
/* Similar to `build', but for template definitions.  */
1829
 
1830
tree
1831
build_min (enum tree_code code, tree tt, ...)
1832
{
1833
  tree t;
1834
  int length;
1835
  int i;
1836
  va_list p;
1837
 
1838
  gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1839
 
1840
  va_start (p, tt);
1841
 
1842
  t = make_node (code);
1843
  length = TREE_CODE_LENGTH (code);
1844
  TREE_TYPE (t) = tt;
1845
 
1846
  for (i = 0; i < length; i++)
1847
    {
1848
      tree x = va_arg (p, tree);
1849
      TREE_OPERAND (t, i) = x;
1850
      if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
1851
        TREE_SIDE_EFFECTS (t) = 1;
1852
    }
1853
 
1854
  va_end (p);
1855
  return t;
1856
}
1857
 
1858
/* Similar to `build', but for template definitions of non-dependent
1859
   expressions. NON_DEP is the non-dependent expression that has been
1860
   built.  */
1861
 
1862
tree
1863
build_min_non_dep (enum tree_code code, tree non_dep, ...)
1864
{
1865
  tree t;
1866
  int length;
1867
  int i;
1868
  va_list p;
1869
 
1870
  gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1871
 
1872
  va_start (p, non_dep);
1873
 
1874
  t = make_node (code);
1875
  length = TREE_CODE_LENGTH (code);
1876
  TREE_TYPE (t) = TREE_TYPE (non_dep);
1877
  TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1878
 
1879
  for (i = 0; i < length; i++)
1880
    {
1881
      tree x = va_arg (p, tree);
1882
      TREE_OPERAND (t, i) = x;
1883
    }
1884
 
1885
  if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1886
    /* This should not be considered a COMPOUND_EXPR, because it
1887
       resolves to an overload.  */
1888
    COMPOUND_EXPR_OVERLOADED (t) = 1;
1889
 
1890
  va_end (p);
1891
  return t;
1892
}
1893
 
1894
/* Similar to `build_call_list', but for template definitions of non-dependent
1895
   expressions. NON_DEP is the non-dependent expression that has been
1896
   built.  */
1897
 
1898
tree
1899
build_min_non_dep_call_vec (tree non_dep, tree fn, VEC(tree,gc) *argvec)
1900
{
1901
  tree t = build_nt_call_vec (fn, argvec);
1902
  TREE_TYPE (t) = TREE_TYPE (non_dep);
1903
  TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1904
  return t;
1905
}
1906
 
1907
tree
1908
get_type_decl (tree t)
1909
{
1910
  if (TREE_CODE (t) == TYPE_DECL)
1911
    return t;
1912
  if (TYPE_P (t))
1913
    return TYPE_STUB_DECL (t);
1914
  gcc_assert (t == error_mark_node);
1915
  return t;
1916
}
1917
 
1918
/* Returns the namespace that contains DECL, whether directly or
1919
   indirectly.  */
1920
 
1921
tree
1922
decl_namespace_context (tree decl)
1923
{
1924
  while (1)
1925
    {
1926
      if (TREE_CODE (decl) == NAMESPACE_DECL)
1927
        return decl;
1928
      else if (TYPE_P (decl))
1929
        decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1930
      else
1931
        decl = CP_DECL_CONTEXT (decl);
1932
    }
1933
}
1934
 
1935
/* Returns true if decl is within an anonymous namespace, however deeply
1936
   nested, or false otherwise.  */
1937
 
1938
bool
1939
decl_anon_ns_mem_p (const_tree decl)
1940
{
1941
  while (1)
1942
    {
1943
      if (decl == NULL_TREE || decl == error_mark_node)
1944
        return false;
1945
      if (TREE_CODE (decl) == NAMESPACE_DECL
1946
          && DECL_NAME (decl) == NULL_TREE)
1947
        return true;
1948
      /* Classes and namespaces inside anonymous namespaces have
1949
         TREE_PUBLIC == 0, so we can shortcut the search.  */
1950
      else if (TYPE_P (decl))
1951
        return (TREE_PUBLIC (TYPE_NAME (decl)) == 0);
1952
      else if (TREE_CODE (decl) == NAMESPACE_DECL)
1953
        return (TREE_PUBLIC (decl) == 0);
1954
      else
1955
        decl = DECL_CONTEXT (decl);
1956
    }
1957
}
1958
 
1959
/* Return truthvalue of whether T1 is the same tree structure as T2.
1960
   Return 1 if they are the same. Return 0 if they are different.  */
1961
 
1962
bool
1963
cp_tree_equal (tree t1, tree t2)
1964
{
1965
  enum tree_code code1, code2;
1966
 
1967
  if (t1 == t2)
1968
    return true;
1969
  if (!t1 || !t2)
1970
    return false;
1971
 
1972
  for (code1 = TREE_CODE (t1);
1973
       CONVERT_EXPR_CODE_P (code1)
1974
         || code1 == NON_LVALUE_EXPR;
1975
       code1 = TREE_CODE (t1))
1976
    t1 = TREE_OPERAND (t1, 0);
1977
  for (code2 = TREE_CODE (t2);
1978
       CONVERT_EXPR_CODE_P (code2)
1979
         || code1 == NON_LVALUE_EXPR;
1980
       code2 = TREE_CODE (t2))
1981
    t2 = TREE_OPERAND (t2, 0);
1982
 
1983
  /* They might have become equal now.  */
1984
  if (t1 == t2)
1985
    return true;
1986
 
1987
  if (code1 != code2)
1988
    return false;
1989
 
1990
  switch (code1)
1991
    {
1992
    case INTEGER_CST:
1993
      return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1994
        && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1995
 
1996
    case REAL_CST:
1997
      return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1998
 
1999
    case STRING_CST:
2000
      return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2001
        && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2002
                    TREE_STRING_LENGTH (t1));
2003
 
2004
    case FIXED_CST:
2005
      return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
2006
                                     TREE_FIXED_CST (t2));
2007
 
2008
    case COMPLEX_CST:
2009
      return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
2010
        && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
2011
 
2012
    case CONSTRUCTOR:
2013
      /* We need to do this when determining whether or not two
2014
         non-type pointer to member function template arguments
2015
         are the same.  */
2016
      if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2017
            /* The first operand is RTL.  */
2018
            && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
2019
        return false;
2020
      return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2021
 
2022
    case TREE_LIST:
2023
      if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
2024
        return false;
2025
      if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
2026
        return false;
2027
      return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
2028
 
2029
    case SAVE_EXPR:
2030
      return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2031
 
2032
    case CALL_EXPR:
2033
      {
2034
        tree arg1, arg2;
2035
        call_expr_arg_iterator iter1, iter2;
2036
        if (!cp_tree_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
2037
          return false;
2038
        for (arg1 = first_call_expr_arg (t1, &iter1),
2039
               arg2 = first_call_expr_arg (t2, &iter2);
2040
             arg1 && arg2;
2041
             arg1 = next_call_expr_arg (&iter1),
2042
               arg2 = next_call_expr_arg (&iter2))
2043
          if (!cp_tree_equal (arg1, arg2))
2044
            return false;
2045
        if (arg1 || arg2)
2046
          return false;
2047
        return true;
2048
      }
2049
 
2050
    case TARGET_EXPR:
2051
      {
2052
        tree o1 = TREE_OPERAND (t1, 0);
2053
        tree o2 = TREE_OPERAND (t2, 0);
2054
 
2055
        /* Special case: if either target is an unallocated VAR_DECL,
2056
           it means that it's going to be unified with whatever the
2057
           TARGET_EXPR is really supposed to initialize, so treat it
2058
           as being equivalent to anything.  */
2059
        if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
2060
            && !DECL_RTL_SET_P (o1))
2061
          /*Nop*/;
2062
        else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
2063
                 && !DECL_RTL_SET_P (o2))
2064
          /*Nop*/;
2065
        else if (!cp_tree_equal (o1, o2))
2066
          return false;
2067
 
2068
        return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2069
      }
2070
 
2071
    case WITH_CLEANUP_EXPR:
2072
      if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2073
        return false;
2074
      return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
2075
 
2076
    case COMPONENT_REF:
2077
      if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
2078
        return false;
2079
      return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2080
 
2081
    case PARM_DECL:
2082
      /* For comparing uses of parameters in late-specified return types
2083
         with an out-of-class definition of the function.  */
2084
      if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2085
          && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2))
2086
        return true;
2087
      else
2088
        return false;
2089
 
2090
    case VAR_DECL:
2091
    case CONST_DECL:
2092
    case FUNCTION_DECL:
2093
    case TEMPLATE_DECL:
2094
    case IDENTIFIER_NODE:
2095
    case SSA_NAME:
2096
      return false;
2097
 
2098
    case BASELINK:
2099
      return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
2100
              && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
2101
              && cp_tree_equal (BASELINK_FUNCTIONS (t1),
2102
                                BASELINK_FUNCTIONS (t2)));
2103
 
2104
    case TEMPLATE_PARM_INDEX:
2105
      return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2106
              && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
2107
              && (TEMPLATE_PARM_PARAMETER_PACK (t1)
2108
                  == TEMPLATE_PARM_PARAMETER_PACK (t2))
2109
              && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
2110
                              TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
2111
 
2112
    case TEMPLATE_ID_EXPR:
2113
      {
2114
        unsigned ix;
2115
        tree vec1, vec2;
2116
 
2117
        if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2118
          return false;
2119
        vec1 = TREE_OPERAND (t1, 1);
2120
        vec2 = TREE_OPERAND (t2, 1);
2121
 
2122
        if (!vec1 || !vec2)
2123
          return !vec1 && !vec2;
2124
 
2125
        if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
2126
          return false;
2127
 
2128
        for (ix = TREE_VEC_LENGTH (vec1); ix--;)
2129
          if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
2130
                              TREE_VEC_ELT (vec2, ix)))
2131
            return false;
2132
 
2133
        return true;
2134
      }
2135
 
2136
    case SIZEOF_EXPR:
2137
    case ALIGNOF_EXPR:
2138
      {
2139
        tree o1 = TREE_OPERAND (t1, 0);
2140
        tree o2 = TREE_OPERAND (t2, 0);
2141
 
2142
        if (TREE_CODE (o1) != TREE_CODE (o2))
2143
          return false;
2144
        if (TYPE_P (o1))
2145
          return same_type_p (o1, o2);
2146
        else
2147
          return cp_tree_equal (o1, o2);
2148
      }
2149
 
2150
    case MODOP_EXPR:
2151
      {
2152
        tree t1_op1, t2_op1;
2153
 
2154
        if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2155
          return false;
2156
 
2157
        t1_op1 = TREE_OPERAND (t1, 1);
2158
        t2_op1 = TREE_OPERAND (t2, 1);
2159
        if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
2160
          return false;
2161
 
2162
        return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
2163
      }
2164
 
2165
    case PTRMEM_CST:
2166
      /* Two pointer-to-members are the same if they point to the same
2167
         field or function in the same class.  */
2168
      if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
2169
        return false;
2170
 
2171
      return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
2172
 
2173
    case OVERLOAD:
2174
      if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
2175
        return false;
2176
      return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
2177
 
2178
    case TRAIT_EXPR:
2179
      if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
2180
        return false;
2181
      return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
2182
        && same_type_p (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
2183
 
2184
    default:
2185
      break;
2186
    }
2187
 
2188
  switch (TREE_CODE_CLASS (code1))
2189
    {
2190
    case tcc_unary:
2191
    case tcc_binary:
2192
    case tcc_comparison:
2193
    case tcc_expression:
2194
    case tcc_vl_exp:
2195
    case tcc_reference:
2196
    case tcc_statement:
2197
      {
2198
        int i, n;
2199
 
2200
        n = TREE_OPERAND_LENGTH (t1);
2201
        if (TREE_CODE_CLASS (code1) == tcc_vl_exp
2202
            && n != TREE_OPERAND_LENGTH (t2))
2203
          return false;
2204
 
2205
        for (i = 0; i < n; ++i)
2206
          if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
2207
            return false;
2208
 
2209
        return true;
2210
      }
2211
 
2212
    case tcc_type:
2213
      return same_type_p (t1, t2);
2214
    default:
2215
      gcc_unreachable ();
2216
    }
2217
  /* We can get here with --disable-checking.  */
2218
  return false;
2219
}
2220
 
2221
/* The type of ARG when used as an lvalue.  */
2222
 
2223
tree
2224
lvalue_type (tree arg)
2225
{
2226
  tree type = TREE_TYPE (arg);
2227
  return type;
2228
}
2229
 
2230
/* The type of ARG for printing error messages; denote lvalues with
2231
   reference types.  */
2232
 
2233
tree
2234
error_type (tree arg)
2235
{
2236
  tree type = TREE_TYPE (arg);
2237
 
2238
  if (TREE_CODE (type) == ARRAY_TYPE)
2239
    ;
2240
  else if (TREE_CODE (type) == ERROR_MARK)
2241
    ;
2242
  else if (real_lvalue_p (arg))
2243
    type = build_reference_type (lvalue_type (arg));
2244
  else if (MAYBE_CLASS_TYPE_P (type))
2245
    type = lvalue_type (arg);
2246
 
2247
  return type;
2248
}
2249
 
2250
/* Does FUNCTION use a variable-length argument list?  */
2251
 
2252
int
2253
varargs_function_p (const_tree function)
2254
{
2255
  const_tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2256
  for (; parm; parm = TREE_CHAIN (parm))
2257
    if (TREE_VALUE (parm) == void_type_node)
2258
      return 0;
2259
  return 1;
2260
}
2261
 
2262
/* Returns 1 if decl is a member of a class.  */
2263
 
2264
int
2265
member_p (const_tree decl)
2266
{
2267
  const_tree const ctx = DECL_CONTEXT (decl);
2268
  return (ctx && TYPE_P (ctx));
2269
}
2270
 
2271
/* Create a placeholder for member access where we don't actually have an
2272
   object that the access is against.  */
2273
 
2274
tree
2275
build_dummy_object (tree type)
2276
{
2277
  tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2278
  return cp_build_indirect_ref (decl, RO_NULL, tf_warning_or_error);
2279
}
2280
 
2281
/* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
2282
   or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
2283
   binfo path from current_class_type to TYPE, or 0.  */
2284
 
2285
tree
2286
maybe_dummy_object (tree type, tree* binfop)
2287
{
2288
  tree decl, context;
2289
  tree binfo;
2290
 
2291
  if (current_class_type
2292
      && (binfo = lookup_base (current_class_type, type,
2293
                               ba_unique | ba_quiet, NULL)))
2294
    context = current_class_type;
2295
  else
2296
    {
2297
      /* Reference from a nested class member function.  */
2298
      context = type;
2299
      binfo = TYPE_BINFO (type);
2300
    }
2301
 
2302
  if (binfop)
2303
    *binfop = binfo;
2304
 
2305
  if (current_class_ref && context == current_class_type
2306
      /* Kludge: Make sure that current_class_type is actually
2307
         correct.  It might not be if we're in the middle of
2308
         tsubst_default_argument.  */
2309
      && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
2310
                      current_class_type))
2311
    decl = current_class_ref;
2312
  else if (current_class_ref && LAMBDA_TYPE_P (current_class_type)
2313
           && context == nonlambda_method_basetype ())
2314
    /* In a lambda, need to go through 'this' capture.  */
2315
    decl = (cp_build_indirect_ref
2316
            ((lambda_expr_this_capture
2317
              (CLASSTYPE_LAMBDA_EXPR (current_class_type))),
2318
             RO_NULL, tf_warning_or_error));
2319
  else
2320
    decl = build_dummy_object (context);
2321
 
2322
  return decl;
2323
}
2324
 
2325
/* Returns 1 if OB is a placeholder object, or a pointer to one.  */
2326
 
2327
int
2328
is_dummy_object (const_tree ob)
2329
{
2330
  if (TREE_CODE (ob) == INDIRECT_REF)
2331
    ob = TREE_OPERAND (ob, 0);
2332
  return (TREE_CODE (ob) == NOP_EXPR
2333
          && TREE_OPERAND (ob, 0) == void_zero_node);
2334
}
2335
 
2336
/* Returns 1 iff type T is something we want to treat as a scalar type for
2337
   the purpose of deciding whether it is trivial/POD/standard-layout.  */
2338
 
2339
static bool
2340
scalarish_type_p (const_tree t)
2341
{
2342
  if (t == error_mark_node)
2343
    return 1;
2344
 
2345
  return (SCALAR_TYPE_P (t)
2346
          || TREE_CODE (t) == VECTOR_TYPE);
2347
}
2348
 
2349
/* Returns true iff T requires non-trivial default initialization.  */
2350
 
2351
bool
2352
type_has_nontrivial_default_init (const_tree t)
2353
{
2354
  t = strip_array_types (CONST_CAST_TREE (t));
2355
 
2356
  if (CLASS_TYPE_P (t))
2357
    return TYPE_HAS_COMPLEX_DFLT (t);
2358
  else
2359
    return 0;
2360
}
2361
 
2362
/* Returns true iff copying an object of type T is non-trivial.  */
2363
 
2364
bool
2365
type_has_nontrivial_copy_init (const_tree t)
2366
{
2367
  t = strip_array_types (CONST_CAST_TREE (t));
2368
 
2369
  if (CLASS_TYPE_P (t))
2370
    return TYPE_HAS_COMPLEX_INIT_REF (t);
2371
  else
2372
    return 0;
2373
}
2374
 
2375
/* Returns 1 iff type T is a trivial type, as defined in [basic.types].  */
2376
 
2377
bool
2378
trivial_type_p (const_tree t)
2379
{
2380
  t = strip_array_types (CONST_CAST_TREE (t));
2381
 
2382
  if (CLASS_TYPE_P (t))
2383
    return (TYPE_HAS_TRIVIAL_DFLT (t)
2384
            && TYPE_HAS_TRIVIAL_INIT_REF (t)
2385
            && TYPE_HAS_TRIVIAL_ASSIGN_REF (t)
2386
            && TYPE_HAS_TRIVIAL_DESTRUCTOR (t));
2387
  else
2388
    return scalarish_type_p (t);
2389
}
2390
 
2391
/* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
2392
 
2393
bool
2394
pod_type_p (const_tree t)
2395
{
2396
  /* This CONST_CAST is okay because strip_array_types returns its
2397
     argument unmodified and we assign it to a const_tree.  */
2398
  t = strip_array_types (CONST_CAST_TREE(t));
2399
 
2400
  if (!CLASS_TYPE_P (t))
2401
    return scalarish_type_p (t);
2402
  else if (cxx_dialect > cxx98)
2403
    /* [class]/10: A POD struct is a class that is both a trivial class and a
2404
       standard-layout class, and has no non-static data members of type
2405
       non-POD struct, non-POD union (or array of such types).
2406
 
2407
       We don't need to check individual members because if a member is
2408
       non-std-layout or non-trivial, the class will be too.  */
2409
    return (std_layout_type_p (t) && trivial_type_p (t));
2410
  else
2411
    /* The C++98 definition of POD is different.  */
2412
    return !CLASSTYPE_NON_LAYOUT_POD_P (t);
2413
}
2414
 
2415
/* Returns true iff T is POD for the purpose of layout, as defined in the
2416
   C++ ABI.  */
2417
 
2418
bool
2419
layout_pod_type_p (const_tree t)
2420
{
2421
  t = strip_array_types (CONST_CAST_TREE (t));
2422
 
2423
  if (CLASS_TYPE_P (t))
2424
    return !CLASSTYPE_NON_LAYOUT_POD_P (t);
2425
  else
2426
    return scalarish_type_p (t);
2427
}
2428
 
2429
/* Returns true iff T is a standard-layout type, as defined in
2430
   [basic.types].  */
2431
 
2432
bool
2433
std_layout_type_p (const_tree t)
2434
{
2435
  t = strip_array_types (CONST_CAST_TREE (t));
2436
 
2437
  if (CLASS_TYPE_P (t))
2438
    return !CLASSTYPE_NON_STD_LAYOUT (t);
2439
  else
2440
    return scalarish_type_p (t);
2441
}
2442
 
2443
/* Nonzero iff type T is a class template implicit specialization.  */
2444
 
2445
bool
2446
class_tmpl_impl_spec_p (const_tree t)
2447
{
2448
  return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
2449
}
2450
 
2451
/* Returns 1 iff zero initialization of type T means actually storing
2452
   zeros in it.  */
2453
 
2454
int
2455
zero_init_p (const_tree t)
2456
{
2457
  /* This CONST_CAST is okay because strip_array_types returns its
2458
     argument unmodified and we assign it to a const_tree.  */
2459
  t = strip_array_types (CONST_CAST_TREE(t));
2460
 
2461
  if (t == error_mark_node)
2462
    return 1;
2463
 
2464
  /* NULL pointers to data members are initialized with -1.  */
2465
  if (TYPE_PTRMEM_P (t))
2466
    return 0;
2467
 
2468
  /* Classes that contain types that can't be zero-initialized, cannot
2469
     be zero-initialized themselves.  */
2470
  if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
2471
    return 0;
2472
 
2473
  return 1;
2474
}
2475
 
2476
/* Table of valid C++ attributes.  */
2477
const struct attribute_spec cxx_attribute_table[] =
2478
{
2479
  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2480
  { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
2481
  { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
2482
  { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
2483
  { NULL,             0, 0, false, false, false, NULL }
2484
};
2485
 
2486
/* Handle a "java_interface" attribute; arguments as in
2487
   struct attribute_spec.handler.  */
2488
static tree
2489
handle_java_interface_attribute (tree* node,
2490
                                 tree name,
2491
                                 tree args ATTRIBUTE_UNUSED ,
2492
                                 int flags,
2493
                                 bool* no_add_attrs)
2494
{
2495
  if (DECL_P (*node)
2496
      || !CLASS_TYPE_P (*node)
2497
      || !TYPE_FOR_JAVA (*node))
2498
    {
2499
      error ("%qE attribute can only be applied to Java class definitions",
2500
             name);
2501
      *no_add_attrs = true;
2502
      return NULL_TREE;
2503
    }
2504
  if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
2505
    *node = build_variant_type_copy (*node);
2506
  TYPE_JAVA_INTERFACE (*node) = 1;
2507
 
2508
  return NULL_TREE;
2509
}
2510
 
2511
/* Handle a "com_interface" attribute; arguments as in
2512
   struct attribute_spec.handler.  */
2513
static tree
2514
handle_com_interface_attribute (tree* node,
2515
                                tree name,
2516
                                tree args ATTRIBUTE_UNUSED ,
2517
                                int flags ATTRIBUTE_UNUSED ,
2518
                                bool* no_add_attrs)
2519
{
2520
  static int warned;
2521
 
2522
  *no_add_attrs = true;
2523
 
2524
  if (DECL_P (*node)
2525
      || !CLASS_TYPE_P (*node)
2526
      || *node != TYPE_MAIN_VARIANT (*node))
2527
    {
2528
      warning (OPT_Wattributes, "%qE attribute can only be applied "
2529
               "to class definitions", name);
2530
      return NULL_TREE;
2531
    }
2532
 
2533
  if (!warned++)
2534
    warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
2535
             name);
2536
 
2537
  return NULL_TREE;
2538
}
2539
 
2540
/* Handle an "init_priority" attribute; arguments as in
2541
   struct attribute_spec.handler.  */
2542
static tree
2543
handle_init_priority_attribute (tree* node,
2544
                                tree name,
2545
                                tree args,
2546
                                int flags ATTRIBUTE_UNUSED ,
2547
                                bool* no_add_attrs)
2548
{
2549
  tree initp_expr = TREE_VALUE (args);
2550
  tree decl = *node;
2551
  tree type = TREE_TYPE (decl);
2552
  int pri;
2553
 
2554
  STRIP_NOPS (initp_expr);
2555
 
2556
  if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2557
    {
2558
      error ("requested init_priority is not an integer constant");
2559
      *no_add_attrs = true;
2560
      return NULL_TREE;
2561
    }
2562
 
2563
  pri = TREE_INT_CST_LOW (initp_expr);
2564
 
2565
  type = strip_array_types (type);
2566
 
2567
  if (decl == NULL_TREE
2568
      || TREE_CODE (decl) != VAR_DECL
2569
      || !TREE_STATIC (decl)
2570
      || DECL_EXTERNAL (decl)
2571
      || (TREE_CODE (type) != RECORD_TYPE
2572
          && TREE_CODE (type) != UNION_TYPE)
2573
      /* Static objects in functions are initialized the
2574
         first time control passes through that
2575
         function. This is not precise enough to pin down an
2576
         init_priority value, so don't allow it.  */
2577
      || current_function_decl)
2578
    {
2579
      error ("can only use %qE attribute on file-scope definitions "
2580
             "of objects of class type", name);
2581
      *no_add_attrs = true;
2582
      return NULL_TREE;
2583
    }
2584
 
2585
  if (pri > MAX_INIT_PRIORITY || pri <= 0)
2586
    {
2587
      error ("requested init_priority is out of range");
2588
      *no_add_attrs = true;
2589
      return NULL_TREE;
2590
    }
2591
 
2592
  /* Check for init_priorities that are reserved for
2593
     language and runtime support implementations.*/
2594
  if (pri <= MAX_RESERVED_INIT_PRIORITY)
2595
    {
2596
      warning
2597
        (0, "requested init_priority is reserved for internal use");
2598
    }
2599
 
2600
  if (SUPPORTS_INIT_PRIORITY)
2601
    {
2602
      SET_DECL_INIT_PRIORITY (decl, pri);
2603
      DECL_HAS_INIT_PRIORITY_P (decl) = 1;
2604
      return NULL_TREE;
2605
    }
2606
  else
2607
    {
2608
      error ("%qE attribute is not supported on this platform", name);
2609
      *no_add_attrs = true;
2610
      return NULL_TREE;
2611
    }
2612
}
2613
 
2614
/* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
2615
   thing pointed to by the constant.  */
2616
 
2617
tree
2618
make_ptrmem_cst (tree type, tree member)
2619
{
2620
  tree ptrmem_cst = make_node (PTRMEM_CST);
2621
  TREE_TYPE (ptrmem_cst) = type;
2622
  PTRMEM_CST_MEMBER (ptrmem_cst) = member;
2623
  return ptrmem_cst;
2624
}
2625
 
2626
/* Build a variant of TYPE that has the indicated ATTRIBUTES.  May
2627
   return an existing type if an appropriate type already exists.  */
2628
 
2629
tree
2630
cp_build_type_attribute_variant (tree type, tree attributes)
2631
{
2632
  tree new_type;
2633
 
2634
  new_type = build_type_attribute_variant (type, attributes);
2635
  if ((TREE_CODE (new_type) == FUNCTION_TYPE
2636
       || TREE_CODE (new_type) == METHOD_TYPE)
2637
      && (TYPE_RAISES_EXCEPTIONS (new_type)
2638
          != TYPE_RAISES_EXCEPTIONS (type)))
2639
    new_type = build_exception_variant (new_type,
2640
                                        TYPE_RAISES_EXCEPTIONS (type));
2641
 
2642
  /* Making a new main variant of a class type is broken.  */
2643
  gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
2644
 
2645
  return new_type;
2646
}
2647
 
2648
/* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
2649
   Called only after doing all language independent checks.  Only
2650
   to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
2651
   compared in type_hash_eq.  */
2652
 
2653
bool
2654
cxx_type_hash_eq (const_tree typea, const_tree typeb)
2655
{
2656
  gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE);
2657
 
2658
  return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
2659
                            TYPE_RAISES_EXCEPTIONS (typeb), 1);
2660
}
2661
 
2662
/* Apply FUNC to all language-specific sub-trees of TP in a pre-order
2663
   traversal.  Called from walk_tree.  */
2664
 
2665
tree
2666
cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
2667
                  void *data, struct pointer_set_t *pset)
2668
{
2669
  enum tree_code code = TREE_CODE (*tp);
2670
  tree result;
2671
 
2672
#define WALK_SUBTREE(NODE)                              \
2673
  do                                                    \
2674
    {                                                   \
2675
      result = cp_walk_tree (&(NODE), func, data, pset);        \
2676
      if (result) goto out;                             \
2677
    }                                                   \
2678
  while (0)
2679
 
2680
  /* Not one of the easy cases.  We must explicitly go through the
2681
     children.  */
2682
  result = NULL_TREE;
2683
  switch (code)
2684
    {
2685
    case DEFAULT_ARG:
2686
    case TEMPLATE_TEMPLATE_PARM:
2687
    case BOUND_TEMPLATE_TEMPLATE_PARM:
2688
    case UNBOUND_CLASS_TEMPLATE:
2689
    case TEMPLATE_PARM_INDEX:
2690
    case TEMPLATE_TYPE_PARM:
2691
    case TYPENAME_TYPE:
2692
    case TYPEOF_TYPE:
2693
      /* None of these have subtrees other than those already walked
2694
         above.  */
2695
      *walk_subtrees_p = 0;
2696
      break;
2697
 
2698
    case BASELINK:
2699
      WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
2700
      *walk_subtrees_p = 0;
2701
      break;
2702
 
2703
    case PTRMEM_CST:
2704
      WALK_SUBTREE (TREE_TYPE (*tp));
2705
      *walk_subtrees_p = 0;
2706
      break;
2707
 
2708
    case TREE_LIST:
2709
      WALK_SUBTREE (TREE_PURPOSE (*tp));
2710
      break;
2711
 
2712
    case OVERLOAD:
2713
      WALK_SUBTREE (OVL_FUNCTION (*tp));
2714
      WALK_SUBTREE (OVL_CHAIN (*tp));
2715
      *walk_subtrees_p = 0;
2716
      break;
2717
 
2718
    case USING_DECL:
2719
      WALK_SUBTREE (DECL_NAME (*tp));
2720
      WALK_SUBTREE (USING_DECL_SCOPE (*tp));
2721
      WALK_SUBTREE (USING_DECL_DECLS (*tp));
2722
      *walk_subtrees_p = 0;
2723
      break;
2724
 
2725
    case RECORD_TYPE:
2726
      if (TYPE_PTRMEMFUNC_P (*tp))
2727
        WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2728
      break;
2729
 
2730
    case TYPE_ARGUMENT_PACK:
2731
    case NONTYPE_ARGUMENT_PACK:
2732
      {
2733
        tree args = ARGUMENT_PACK_ARGS (*tp);
2734
        int i, len = TREE_VEC_LENGTH (args);
2735
        for (i = 0; i < len; i++)
2736
          WALK_SUBTREE (TREE_VEC_ELT (args, i));
2737
      }
2738
      break;
2739
 
2740
    case TYPE_PACK_EXPANSION:
2741
      WALK_SUBTREE (TREE_TYPE (*tp));
2742
      *walk_subtrees_p = 0;
2743
      break;
2744
 
2745
    case EXPR_PACK_EXPANSION:
2746
      WALK_SUBTREE (TREE_OPERAND (*tp, 0));
2747
      *walk_subtrees_p = 0;
2748
      break;
2749
 
2750
    case CAST_EXPR:
2751
    case REINTERPRET_CAST_EXPR:
2752
    case STATIC_CAST_EXPR:
2753
    case CONST_CAST_EXPR:
2754
    case DYNAMIC_CAST_EXPR:
2755
      if (TREE_TYPE (*tp))
2756
        WALK_SUBTREE (TREE_TYPE (*tp));
2757
 
2758
      {
2759
        int i;
2760
        for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
2761
          WALK_SUBTREE (TREE_OPERAND (*tp, i));
2762
      }
2763
      *walk_subtrees_p = 0;
2764
      break;
2765
 
2766
    case TRAIT_EXPR:
2767
      WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
2768
      WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
2769
      *walk_subtrees_p = 0;
2770
      break;
2771
 
2772
    case DECLTYPE_TYPE:
2773
      WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp));
2774
      *walk_subtrees_p = 0;
2775
      break;
2776
 
2777
 
2778
    default:
2779
      return NULL_TREE;
2780
    }
2781
 
2782
  /* We didn't find what we were looking for.  */
2783
 out:
2784
  return result;
2785
 
2786
#undef WALK_SUBTREE
2787
}
2788
 
2789
/* Like save_expr, but for C++.  */
2790
 
2791
tree
2792
cp_save_expr (tree expr)
2793
{
2794
  /* There is no reason to create a SAVE_EXPR within a template; if
2795
     needed, we can create the SAVE_EXPR when instantiating the
2796
     template.  Furthermore, the middle-end cannot handle C++-specific
2797
     tree codes.  */
2798
  if (processing_template_decl)
2799
    return expr;
2800
  return save_expr (expr);
2801
}
2802
 
2803
/* Initialize tree.c.  */
2804
 
2805
void
2806
init_tree (void)
2807
{
2808
  list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
2809
}
2810
 
2811
/* Returns the kind of special function that DECL (a FUNCTION_DECL)
2812
   is.  Note that sfk_none is zero, so this function can be used as a
2813
   predicate to test whether or not DECL is a special function.  */
2814
 
2815
special_function_kind
2816
special_function_p (const_tree decl)
2817
{
2818
  /* Rather than doing all this stuff with magic names, we should
2819
     probably have a field of type `special_function_kind' in
2820
     DECL_LANG_SPECIFIC.  */
2821
  if (DECL_COPY_CONSTRUCTOR_P (decl))
2822
    return sfk_copy_constructor;
2823
  if (DECL_MOVE_CONSTRUCTOR_P (decl))
2824
    return sfk_move_constructor;
2825
  if (DECL_CONSTRUCTOR_P (decl))
2826
    return sfk_constructor;
2827
  if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2828
    return sfk_assignment_operator;
2829
  if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2830
    return sfk_destructor;
2831
  if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2832
    return sfk_complete_destructor;
2833
  if (DECL_BASE_DESTRUCTOR_P (decl))
2834
    return sfk_base_destructor;
2835
  if (DECL_DELETING_DESTRUCTOR_P (decl))
2836
    return sfk_deleting_destructor;
2837
  if (DECL_CONV_FN_P (decl))
2838
    return sfk_conversion;
2839
 
2840
  return sfk_none;
2841
}
2842
 
2843
/* Returns nonzero if TYPE is a character type, including wchar_t.  */
2844
 
2845
int
2846
char_type_p (tree type)
2847
{
2848
  return (same_type_p (type, char_type_node)
2849
          || same_type_p (type, unsigned_char_type_node)
2850
          || same_type_p (type, signed_char_type_node)
2851
          || same_type_p (type, char16_type_node)
2852
          || same_type_p (type, char32_type_node)
2853
          || same_type_p (type, wchar_type_node));
2854
}
2855
 
2856
/* Returns the kind of linkage associated with the indicated DECL.  Th
2857
   value returned is as specified by the language standard; it is
2858
   independent of implementation details regarding template
2859
   instantiation, etc.  For example, it is possible that a declaration
2860
   to which this function assigns external linkage would not show up
2861
   as a global symbol when you run `nm' on the resulting object file.  */
2862
 
2863
linkage_kind
2864
decl_linkage (tree decl)
2865
{
2866
  /* This function doesn't attempt to calculate the linkage from first
2867
     principles as given in [basic.link].  Instead, it makes use of
2868
     the fact that we have already set TREE_PUBLIC appropriately, and
2869
     then handles a few special cases.  Ideally, we would calculate
2870
     linkage first, and then transform that into a concrete
2871
     implementation.  */
2872
 
2873
  /* Things that don't have names have no linkage.  */
2874
  if (!DECL_NAME (decl))
2875
    return lk_none;
2876
 
2877
  /* Fields have no linkage.  */
2878
  if (TREE_CODE (decl) == FIELD_DECL)
2879
    return lk_none;
2880
 
2881
  /* Things that are TREE_PUBLIC have external linkage.  */
2882
  if (TREE_PUBLIC (decl))
2883
    return lk_external;
2884
 
2885
  if (TREE_CODE (decl) == NAMESPACE_DECL)
2886
    return lk_external;
2887
 
2888
  /* Linkage of a CONST_DECL depends on the linkage of the enumeration
2889
     type.  */
2890
  if (TREE_CODE (decl) == CONST_DECL)
2891
    return decl_linkage (TYPE_NAME (TREE_TYPE (decl)));
2892
 
2893
  /* Some things that are not TREE_PUBLIC have external linkage, too.
2894
     For example, on targets that don't have weak symbols, we make all
2895
     template instantiations have internal linkage (in the object
2896
     file), but the symbols should still be treated as having external
2897
     linkage from the point of view of the language.  */
2898
  if ((TREE_CODE (decl) == FUNCTION_DECL
2899
       || TREE_CODE (decl) == VAR_DECL)
2900
      && DECL_COMDAT (decl))
2901
    return lk_external;
2902
 
2903
  /* Things in local scope do not have linkage, if they don't have
2904
     TREE_PUBLIC set.  */
2905
  if (decl_function_context (decl))
2906
    return lk_none;
2907
 
2908
  /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
2909
     are considered to have external linkage for language purposes.  DECLs
2910
     really meant to have internal linkage have DECL_THIS_STATIC set.  */
2911
  if (TREE_CODE (decl) == TYPE_DECL)
2912
    return lk_external;
2913
  if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
2914
    {
2915
      if (!DECL_THIS_STATIC (decl))
2916
        return lk_external;
2917
 
2918
      /* Static data members and static member functions from classes
2919
         in anonymous namespace also don't have TREE_PUBLIC set.  */
2920
      if (DECL_CLASS_CONTEXT (decl))
2921
        return lk_external;
2922
    }
2923
 
2924
  /* Everything else has internal linkage.  */
2925
  return lk_internal;
2926
}
2927
 
2928
/* EXP is an expression that we want to pre-evaluate.  Returns (in
2929
   *INITP) an expression that will perform the pre-evaluation.  The
2930
   value returned by this function is a side-effect free expression
2931
   equivalent to the pre-evaluated expression.  Callers must ensure
2932
   that *INITP is evaluated before EXP.  */
2933
 
2934
tree
2935
stabilize_expr (tree exp, tree* initp)
2936
{
2937
  tree init_expr;
2938
 
2939
  if (!TREE_SIDE_EFFECTS (exp))
2940
    init_expr = NULL_TREE;
2941
  else if (!real_lvalue_p (exp)
2942
           || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2943
    {
2944
      init_expr = get_target_expr (exp);
2945
      exp = TARGET_EXPR_SLOT (init_expr);
2946
    }
2947
  else
2948
    {
2949
      exp = cp_build_unary_op (ADDR_EXPR, exp, 1, tf_warning_or_error);
2950
      init_expr = get_target_expr (exp);
2951
      exp = TARGET_EXPR_SLOT (init_expr);
2952
      exp = cp_build_indirect_ref (exp, RO_NULL, tf_warning_or_error);
2953
    }
2954
  *initp = init_expr;
2955
 
2956
  gcc_assert (!TREE_SIDE_EFFECTS (exp));
2957
  return exp;
2958
}
2959
 
2960
/* Add NEW_EXPR, an expression whose value we don't care about, after the
2961
   similar expression ORIG.  */
2962
 
2963
tree
2964
add_stmt_to_compound (tree orig, tree new_expr)
2965
{
2966
  if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
2967
    return orig;
2968
  if (!orig || !TREE_SIDE_EFFECTS (orig))
2969
    return new_expr;
2970
  return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
2971
}
2972
 
2973
/* Like stabilize_expr, but for a call whose arguments we want to
2974
   pre-evaluate.  CALL is modified in place to use the pre-evaluated
2975
   arguments, while, upon return, *INITP contains an expression to
2976
   compute the arguments.  */
2977
 
2978
void
2979
stabilize_call (tree call, tree *initp)
2980
{
2981
  tree inits = NULL_TREE;
2982
  int i;
2983
  int nargs = call_expr_nargs (call);
2984
 
2985
  if (call == error_mark_node || processing_template_decl)
2986
    {
2987
      *initp = NULL_TREE;
2988
      return;
2989
    }
2990
 
2991
  gcc_assert (TREE_CODE (call) == CALL_EXPR);
2992
 
2993
  for (i = 0; i < nargs; i++)
2994
    {
2995
      tree init;
2996
      CALL_EXPR_ARG (call, i) =
2997
        stabilize_expr (CALL_EXPR_ARG (call, i), &init);
2998
      inits = add_stmt_to_compound (inits, init);
2999
    }
3000
 
3001
  *initp = inits;
3002
}
3003
 
3004
/* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
3005
   to pre-evaluate.  CALL is modified in place to use the pre-evaluated
3006
   arguments, while, upon return, *INITP contains an expression to
3007
   compute the arguments.  */
3008
 
3009
void
3010
stabilize_aggr_init (tree call, tree *initp)
3011
{
3012
  tree inits = NULL_TREE;
3013
  int i;
3014
  int nargs = aggr_init_expr_nargs (call);
3015
 
3016
  if (call == error_mark_node)
3017
    return;
3018
 
3019
  gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
3020
 
3021
  for (i = 0; i < nargs; i++)
3022
    {
3023
      tree init;
3024
      AGGR_INIT_EXPR_ARG (call, i) =
3025
        stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
3026
      inits = add_stmt_to_compound (inits, init);
3027
    }
3028
 
3029
  *initp = inits;
3030
}
3031
 
3032
/* Like stabilize_expr, but for an initialization.
3033
 
3034
   If the initialization is for an object of class type, this function
3035
   takes care not to introduce additional temporaries.
3036
 
3037
   Returns TRUE iff the expression was successfully pre-evaluated,
3038
   i.e., if INIT is now side-effect free, except for, possible, a
3039
   single call to a constructor.  */
3040
 
3041
bool
3042
stabilize_init (tree init, tree *initp)
3043
{
3044
  tree t = init;
3045
 
3046
  *initp = NULL_TREE;
3047
 
3048
  if (t == error_mark_node || processing_template_decl)
3049
    return true;
3050
 
3051
  if (TREE_CODE (t) == INIT_EXPR
3052
      && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR
3053
      && TREE_CODE (TREE_OPERAND (t, 1)) != AGGR_INIT_EXPR)
3054
    {
3055
      TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
3056
      return true;
3057
    }
3058
 
3059
  if (TREE_CODE (t) == INIT_EXPR)
3060
    t = TREE_OPERAND (t, 1);
3061
  if (TREE_CODE (t) == TARGET_EXPR)
3062
    t = TARGET_EXPR_INITIAL (t);
3063
  if (TREE_CODE (t) == COMPOUND_EXPR)
3064
    t = expr_last (t);
3065
  if (TREE_CODE (t) == CONSTRUCTOR
3066
      && EMPTY_CONSTRUCTOR_P (t))
3067
    /* Default-initialization.  */
3068
    return true;
3069
 
3070
  /* If the initializer is a COND_EXPR, we can't preevaluate
3071
     anything.  */
3072
  if (TREE_CODE (t) == COND_EXPR)
3073
    return false;
3074
 
3075
  if (TREE_CODE (t) == CALL_EXPR)
3076
    {
3077
      stabilize_call (t, initp);
3078
      return true;
3079
    }
3080
 
3081
  if (TREE_CODE (t) == AGGR_INIT_EXPR)
3082
    {
3083
      stabilize_aggr_init (t, initp);
3084
      return true;
3085
    }
3086
 
3087
  /* The initialization is being performed via a bitwise copy -- and
3088
     the item copied may have side effects.  */
3089
  return TREE_SIDE_EFFECTS (init);
3090
}
3091
 
3092
/* Like "fold", but should be used whenever we might be processing the
3093
   body of a template.  */
3094
 
3095
tree
3096
fold_if_not_in_template (tree expr)
3097
{
3098
  /* In the body of a template, there is never any need to call
3099
     "fold".  We will call fold later when actually instantiating the
3100
     template.  Integral constant expressions in templates will be
3101
     evaluated via fold_non_dependent_expr, as necessary.  */
3102
  if (processing_template_decl)
3103
    return expr;
3104
 
3105
  /* Fold C++ front-end specific tree codes.  */
3106
  if (TREE_CODE (expr) == UNARY_PLUS_EXPR)
3107
    return fold_convert (TREE_TYPE (expr), TREE_OPERAND (expr, 0));
3108
 
3109
  return fold (expr);
3110
}
3111
 
3112
/* Returns true if a cast to TYPE may appear in an integral constant
3113
   expression.  */
3114
 
3115
bool
3116
cast_valid_in_integral_constant_expression_p (tree type)
3117
{
3118
  return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
3119
          || dependent_type_p (type)
3120
          || type == error_mark_node);
3121
}
3122
 
3123
/* Return true if we need to fix linkage information of DECL.  */
3124
 
3125
static bool
3126
cp_fix_function_decl_p (tree decl)
3127
{
3128
  /* Skip if DECL is not externally visible.  */
3129
  if (!TREE_PUBLIC (decl))
3130
    return false;
3131
 
3132
  /* We need to fix DECL if it a appears to be exported but with no
3133
     function body.  Thunks do not have CFGs and we may need to
3134
     handle them specially later.   */
3135
  if (!gimple_has_body_p (decl)
3136
      && !DECL_THUNK_P (decl)
3137
      && !DECL_EXTERNAL (decl))
3138
    {
3139
      struct cgraph_node *node = cgraph_get_node (decl);
3140
 
3141
      /* Don't fix same_body aliases.  Although they don't have their own
3142
         CFG, they share it with what they alias to.  */
3143
      if (!node
3144
          || node->decl == decl
3145
          || !node->same_body)
3146
        return true;
3147
    }
3148
 
3149
  return false;
3150
}
3151
 
3152
/* Clean the C++ specific parts of the tree T. */
3153
 
3154
void
3155
cp_free_lang_data (tree t)
3156
{
3157
  if (TREE_CODE (t) == METHOD_TYPE
3158
      || TREE_CODE (t) == FUNCTION_TYPE)
3159
    {
3160
      /* Default args are not interesting anymore.  */
3161
      tree argtypes = TYPE_ARG_TYPES (t);
3162
      while (argtypes)
3163
        {
3164
          TREE_PURPOSE (argtypes) = 0;
3165
          argtypes = TREE_CHAIN (argtypes);
3166
        }
3167
    }
3168
  else if (TREE_CODE (t) == FUNCTION_DECL
3169
           && cp_fix_function_decl_p (t))
3170
    {
3171
      /* If T is used in this translation unit at all,  the definition
3172
         must exist somewhere else since we have decided to not emit it
3173
         in this TU.  So make it an external reference.  */
3174
      DECL_EXTERNAL (t) = 1;
3175
      TREE_STATIC (t) = 0;
3176
    }
3177
  if (CP_AGGREGATE_TYPE_P (t)
3178
      && TYPE_NAME (t))
3179
    {
3180
      tree name = TYPE_NAME (t);
3181
      if (TREE_CODE (name) == TYPE_DECL)
3182
        name = DECL_NAME (name);
3183
      /* Drop anonymous names.  */
3184
      if (name != NULL_TREE
3185
          && ANON_AGGRNAME_P (name))
3186
        TYPE_NAME (t) = NULL_TREE;
3187
    }
3188
}
3189
 
3190
 
3191
#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
3192
/* Complain that some language-specific thing hanging off a tree
3193
   node has been accessed improperly.  */
3194
 
3195
void
3196
lang_check_failed (const char* file, int line, const char* function)
3197
{
3198
  internal_error ("lang_* check: failed in %s, at %s:%d",
3199
                  function, trim_filename (file), line);
3200
}
3201
#endif /* ENABLE_TREE_CHECKING */
3202
 
3203
#include "gt-cp-tree.h"

powered by: WebSVN 2.1.0

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