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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [tree.c] - Blame information for rev 20

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
/* Language-independent 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 Free Software Foundation, Inc.
4
 
5
This file is part of GCC.
6
 
7
GCC is free software; you can redistribute it and/or modify it under
8
the terms of the GNU General Public License as published by the Free
9
Software Foundation; either version 2, or (at your option) any later
10
version.
11
 
12
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13
WARRANTY; without even the implied warranty of MERCHANTABILITY or
14
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15
for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with GCC; see the file COPYING.  If not, write to the Free
19
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20
02110-1301, USA.  */
21
 
22
/* This file contains the low level primitives for operating on tree nodes,
23
   including allocation, list operations, interning of identifiers,
24
   construction of data type nodes and statement nodes,
25
   and construction of type conversion nodes.  It also contains
26
   tables index by tree code that describe how to take apart
27
   nodes of that code.
28
 
29
   It is intended to be language-independent, but occasionally
30
   calls language-dependent routines defined (for C) in typecheck.c.  */
31
 
32
#include "config.h"
33
#include "system.h"
34
#include "coretypes.h"
35
#include "tm.h"
36
#include "flags.h"
37
#include "tree.h"
38
#include "real.h"
39
#include "tm_p.h"
40
#include "function.h"
41
#include "obstack.h"
42
#include "toplev.h"
43
#include "ggc.h"
44
#include "hashtab.h"
45
#include "output.h"
46
#include "target.h"
47
#include "langhooks.h"
48
#include "tree-iterator.h"
49
#include "basic-block.h"
50
#include "tree-flow.h"
51
#include "params.h"
52
#include "pointer-set.h"
53
 
54
/* Each tree code class has an associated string representation.
55
   These must correspond to the tree_code_class entries.  */
56
 
57
const char *const tree_code_class_strings[] =
58
{
59
  "exceptional",
60
  "constant",
61
  "type",
62
  "declaration",
63
  "reference",
64
  "comparison",
65
  "unary",
66
  "binary",
67
  "statement",
68
  "expression",
69
};
70
 
71
/* obstack.[ch] explicitly declined to prototype this.  */
72
extern int _obstack_allocated_p (struct obstack *h, void *obj);
73
 
74
#ifdef GATHER_STATISTICS
75
/* Statistics-gathering stuff.  */
76
 
77
int tree_node_counts[(int) all_kinds];
78
int tree_node_sizes[(int) all_kinds];
79
 
80
/* Keep in sync with tree.h:enum tree_node_kind.  */
81
static const char * const tree_node_kind_names[] = {
82
  "decls",
83
  "types",
84
  "blocks",
85
  "stmts",
86
  "refs",
87
  "exprs",
88
  "constants",
89
  "identifiers",
90
  "perm_tree_lists",
91
  "temp_tree_lists",
92
  "vecs",
93
  "binfos",
94
  "phi_nodes",
95
  "ssa names",
96
  "constructors",
97
  "random kinds",
98
  "lang_decl kinds",
99
  "lang_type kinds"
100
};
101
#endif /* GATHER_STATISTICS */
102
 
103
/* Unique id for next decl created.  */
104
static GTY(()) int next_decl_uid;
105
/* Unique id for next type created.  */
106
static GTY(()) int next_type_uid = 1;
107
 
108
/* Since we cannot rehash a type after it is in the table, we have to
109
   keep the hash code.  */
110
 
111
struct type_hash GTY(())
112
{
113
  unsigned long hash;
114
  tree type;
115
};
116
 
117
/* Initial size of the hash table (rounded to next prime).  */
118
#define TYPE_HASH_INITIAL_SIZE 1000
119
 
120
/* Now here is the hash table.  When recording a type, it is added to
121
   the slot whose index is the hash code.  Note that the hash table is
122
   used for several kinds of types (function types, array types and
123
   array index range types, for now).  While all these live in the
124
   same table, they are completely independent, and the hash code is
125
   computed differently for each of these.  */
126
 
127
static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
128
     htab_t type_hash_table;
129
 
130
/* Hash table and temporary node for larger integer const values.  */
131
static GTY (()) tree int_cst_node;
132
static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
133
     htab_t int_cst_hash_table;
134
 
135
/* General tree->tree mapping  structure for use in hash tables.  */
136
 
137
 
138
static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
139
     htab_t debug_expr_for_decl;
140
 
141
static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
142
     htab_t value_expr_for_decl;
143
 
144
static GTY ((if_marked ("tree_int_map_marked_p"), param_is (struct tree_int_map)))
145
  htab_t init_priority_for_decl;
146
 
147
static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
148
  htab_t restrict_base_for_decl;
149
 
150
struct tree_int_map GTY(())
151
{
152
  tree from;
153
  unsigned short to;
154
};
155
static unsigned int tree_int_map_hash (const void *);
156
static int tree_int_map_eq (const void *, const void *);
157
static int tree_int_map_marked_p (const void *);
158
static void set_type_quals (tree, int);
159
static int type_hash_eq (const void *, const void *);
160
static hashval_t type_hash_hash (const void *);
161
static hashval_t int_cst_hash_hash (const void *);
162
static int int_cst_hash_eq (const void *, const void *);
163
static void print_type_hash_statistics (void);
164
static void print_debug_expr_statistics (void);
165
static void print_value_expr_statistics (void);
166
static tree make_vector_type (tree, int, enum machine_mode);
167
static int type_hash_marked_p (const void *);
168
static unsigned int type_hash_list (tree, hashval_t);
169
static unsigned int attribute_hash_list (tree, hashval_t);
170
 
171
tree global_trees[TI_MAX];
172
tree integer_types[itk_none];
173
 
174
unsigned char tree_contains_struct[256][64];
175
 
176
/* Init tree.c.  */
177
 
178
void
179
init_ttree (void)
180
{
181
 
182
  /* Initialize the hash table of types.  */
183
  type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
184
                                     type_hash_eq, 0);
185
 
186
  debug_expr_for_decl = htab_create_ggc (512, tree_map_hash,
187
                                         tree_map_eq, 0);
188
 
189
  value_expr_for_decl = htab_create_ggc (512, tree_map_hash,
190
                                         tree_map_eq, 0);
191
  init_priority_for_decl = htab_create_ggc (512, tree_int_map_hash,
192
                                            tree_int_map_eq, 0);
193
  restrict_base_for_decl = htab_create_ggc (256, tree_map_hash,
194
                                            tree_map_eq, 0);
195
 
196
  int_cst_hash_table = htab_create_ggc (1024, int_cst_hash_hash,
197
                                        int_cst_hash_eq, NULL);
198
 
199
  int_cst_node = make_node (INTEGER_CST);
200
 
201
  tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON] = 1;
202
  tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_NON_COMMON] = 1;
203
  tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON] = 1;
204
 
205
 
206
  tree_contains_struct[CONST_DECL][TS_DECL_COMMON] = 1;
207
  tree_contains_struct[VAR_DECL][TS_DECL_COMMON] = 1;
208
  tree_contains_struct[PARM_DECL][TS_DECL_COMMON] = 1;
209
  tree_contains_struct[RESULT_DECL][TS_DECL_COMMON] = 1;
210
  tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON] = 1;
211
  tree_contains_struct[TYPE_DECL][TS_DECL_COMMON] = 1;
212
  tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON] = 1;
213
  tree_contains_struct[LABEL_DECL][TS_DECL_COMMON] = 1;
214
  tree_contains_struct[FIELD_DECL][TS_DECL_COMMON] = 1;
215
 
216
 
217
  tree_contains_struct[CONST_DECL][TS_DECL_WRTL] = 1;
218
  tree_contains_struct[VAR_DECL][TS_DECL_WRTL] = 1;
219
  tree_contains_struct[PARM_DECL][TS_DECL_WRTL] = 1;
220
  tree_contains_struct[RESULT_DECL][TS_DECL_WRTL] = 1;
221
  tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL] = 1;
222
  tree_contains_struct[LABEL_DECL][TS_DECL_WRTL] = 1;
223
 
224
  tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL] = 1;
225
  tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL] = 1;
226
  tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL] = 1;
227
  tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL] = 1;
228
  tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL] = 1;
229
  tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL] = 1;
230
  tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL] = 1;
231
  tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL] = 1;
232
  tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL] = 1;
233
 
234
  tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS] = 1;
235
  tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS] = 1;
236
  tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS] = 1;
237
  tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_WITH_VIS] = 1;
238
 
239
  tree_contains_struct[VAR_DECL][TS_VAR_DECL] = 1;
240
  tree_contains_struct[FIELD_DECL][TS_FIELD_DECL] = 1;
241
  tree_contains_struct[PARM_DECL][TS_PARM_DECL] = 1;
242
  tree_contains_struct[LABEL_DECL][TS_LABEL_DECL] = 1;
243
  tree_contains_struct[RESULT_DECL][TS_RESULT_DECL] = 1;
244
  tree_contains_struct[CONST_DECL][TS_CONST_DECL] = 1;
245
  tree_contains_struct[TYPE_DECL][TS_TYPE_DECL] = 1;
246
  tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL] = 1;
247
 
248
  lang_hooks.init_ts ();
249
}
250
 
251
 
252
/* The name of the object as the assembler will see it (but before any
253
   translations made by ASM_OUTPUT_LABELREF).  Often this is the same
254
   as DECL_NAME.  It is an IDENTIFIER_NODE.  */
255
tree
256
decl_assembler_name (tree decl)
257
{
258
  if (!DECL_ASSEMBLER_NAME_SET_P (decl))
259
    lang_hooks.set_decl_assembler_name (decl);
260
  return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
261
}
262
 
263
/* Compute the number of bytes occupied by a tree with code CODE.
264
   This function cannot be used for TREE_VEC, PHI_NODE, or STRING_CST
265
   codes, which are of variable length.  */
266
size_t
267
tree_code_size (enum tree_code code)
268
{
269
  switch (TREE_CODE_CLASS (code))
270
    {
271
    case tcc_declaration:  /* A decl node */
272
      {
273
        switch (code)
274
          {
275
          case FIELD_DECL:
276
            return sizeof (struct tree_field_decl);
277
          case PARM_DECL:
278
            return sizeof (struct tree_parm_decl);
279
          case VAR_DECL:
280
            return sizeof (struct tree_var_decl);
281
          case LABEL_DECL:
282
            return sizeof (struct tree_label_decl);
283
          case RESULT_DECL:
284
            return sizeof (struct tree_result_decl);
285
          case CONST_DECL:
286
            return sizeof (struct tree_const_decl);
287
          case TYPE_DECL:
288
            return sizeof (struct tree_type_decl);
289
          case FUNCTION_DECL:
290
            return sizeof (struct tree_function_decl);
291
          default:
292
            return sizeof (struct tree_decl_non_common);
293
          }
294
      }
295
 
296
    case tcc_type:  /* a type node */
297
      return sizeof (struct tree_type);
298
 
299
    case tcc_reference:   /* a reference */
300
    case tcc_expression:  /* an expression */
301
    case tcc_statement:   /* an expression with side effects */
302
    case tcc_comparison:  /* a comparison expression */
303
    case tcc_unary:       /* a unary arithmetic expression */
304
    case tcc_binary:      /* a binary arithmetic expression */
305
      return (sizeof (struct tree_exp)
306
              + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *));
307
 
308
    case tcc_constant:  /* a constant */
309
      switch (code)
310
        {
311
        case INTEGER_CST:       return sizeof (struct tree_int_cst);
312
        case REAL_CST:          return sizeof (struct tree_real_cst);
313
        case COMPLEX_CST:       return sizeof (struct tree_complex);
314
        case VECTOR_CST:        return sizeof (struct tree_vector);
315
        case STRING_CST:        gcc_unreachable ();
316
        default:
317
          return lang_hooks.tree_size (code);
318
        }
319
 
320
    case tcc_exceptional:  /* something random, like an identifier.  */
321
      switch (code)
322
        {
323
        case IDENTIFIER_NODE:   return lang_hooks.identifier_size;
324
        case TREE_LIST:         return sizeof (struct tree_list);
325
 
326
        case ERROR_MARK:
327
        case PLACEHOLDER_EXPR:  return sizeof (struct tree_common);
328
 
329
        case TREE_VEC:
330
        case PHI_NODE:          gcc_unreachable ();
331
 
332
        case SSA_NAME:          return sizeof (struct tree_ssa_name);
333
 
334
        case STATEMENT_LIST:    return sizeof (struct tree_statement_list);
335
        case BLOCK:             return sizeof (struct tree_block);
336
        case VALUE_HANDLE:      return sizeof (struct tree_value_handle);
337
        case CONSTRUCTOR:       return sizeof (struct tree_constructor);
338
 
339
        default:
340
          return lang_hooks.tree_size (code);
341
        }
342
 
343
    default:
344
      gcc_unreachable ();
345
    }
346
}
347
 
348
/* Compute the number of bytes occupied by NODE.  This routine only
349
   looks at TREE_CODE, except for PHI_NODE and TREE_VEC nodes.  */
350
size_t
351
tree_size (tree node)
352
{
353
  enum tree_code code = TREE_CODE (node);
354
  switch (code)
355
    {
356
    case PHI_NODE:
357
      return (sizeof (struct tree_phi_node)
358
              + (PHI_ARG_CAPACITY (node) - 1) * sizeof (struct phi_arg_d));
359
 
360
    case TREE_BINFO:
361
      return (offsetof (struct tree_binfo, base_binfos)
362
              + VEC_embedded_size (tree, BINFO_N_BASE_BINFOS (node)));
363
 
364
    case TREE_VEC:
365
      return (sizeof (struct tree_vec)
366
              + (TREE_VEC_LENGTH (node) - 1) * sizeof(char *));
367
 
368
    case STRING_CST:
369
      return sizeof (struct tree_string) + TREE_STRING_LENGTH (node) - 1;
370
 
371
    default:
372
      return tree_code_size (code);
373
    }
374
}
375
 
376
/* Return a newly allocated node of code CODE.  For decl and type
377
   nodes, some other fields are initialized.  The rest of the node is
378
   initialized to zero.  This function cannot be used for PHI_NODE or
379
   TREE_VEC nodes, which is enforced by asserts in tree_code_size.
380
 
381
   Achoo!  I got a code in the node.  */
382
 
383
tree
384
make_node_stat (enum tree_code code MEM_STAT_DECL)
385
{
386
  tree t;
387
  enum tree_code_class type = TREE_CODE_CLASS (code);
388
  size_t length = tree_code_size (code);
389
#ifdef GATHER_STATISTICS
390
  tree_node_kind kind;
391
 
392
  switch (type)
393
    {
394
    case tcc_declaration:  /* A decl node */
395
      kind = d_kind;
396
      break;
397
 
398
    case tcc_type:  /* a type node */
399
      kind = t_kind;
400
      break;
401
 
402
    case tcc_statement:  /* an expression with side effects */
403
      kind = s_kind;
404
      break;
405
 
406
    case tcc_reference:  /* a reference */
407
      kind = r_kind;
408
      break;
409
 
410
    case tcc_expression:  /* an expression */
411
    case tcc_comparison:  /* a comparison expression */
412
    case tcc_unary:  /* a unary arithmetic expression */
413
    case tcc_binary:  /* a binary arithmetic expression */
414
      kind = e_kind;
415
      break;
416
 
417
    case tcc_constant:  /* a constant */
418
      kind = c_kind;
419
      break;
420
 
421
    case tcc_exceptional:  /* something random, like an identifier.  */
422
      switch (code)
423
        {
424
        case IDENTIFIER_NODE:
425
          kind = id_kind;
426
          break;
427
 
428
        case TREE_VEC:
429
          kind = vec_kind;
430
          break;
431
 
432
        case TREE_BINFO:
433
          kind = binfo_kind;
434
          break;
435
 
436
        case PHI_NODE:
437
          kind = phi_kind;
438
          break;
439
 
440
        case SSA_NAME:
441
          kind = ssa_name_kind;
442
          break;
443
 
444
        case BLOCK:
445
          kind = b_kind;
446
          break;
447
 
448
        case CONSTRUCTOR:
449
          kind = constr_kind;
450
          break;
451
 
452
        default:
453
          kind = x_kind;
454
          break;
455
        }
456
      break;
457
 
458
    default:
459
      gcc_unreachable ();
460
    }
461
 
462
  tree_node_counts[(int) kind]++;
463
  tree_node_sizes[(int) kind] += length;
464
#endif
465
 
466
  if (code == IDENTIFIER_NODE)
467
    t = ggc_alloc_zone_pass_stat (length, &tree_id_zone);
468
  else
469
    t = ggc_alloc_zone_pass_stat (length, &tree_zone);
470
 
471
  memset (t, 0, length);
472
 
473
  TREE_SET_CODE (t, code);
474
 
475
  switch (type)
476
    {
477
    case tcc_statement:
478
      TREE_SIDE_EFFECTS (t) = 1;
479
      break;
480
 
481
    case tcc_declaration:
482
      if (code != FUNCTION_DECL)
483
        DECL_ALIGN (t) = 1;
484
      DECL_USER_ALIGN (t) = 0;
485
      if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
486
        DECL_IN_SYSTEM_HEADER (t) = in_system_header;
487
      /* We have not yet computed the alias set for this declaration.  */
488
      DECL_POINTER_ALIAS_SET (t) = -1;
489
      DECL_SOURCE_LOCATION (t) = input_location;
490
      DECL_UID (t) = next_decl_uid++;
491
 
492
      break;
493
 
494
    case tcc_type:
495
      TYPE_UID (t) = next_type_uid++;
496
      TYPE_ALIGN (t) = BITS_PER_UNIT;
497
      TYPE_USER_ALIGN (t) = 0;
498
      TYPE_MAIN_VARIANT (t) = t;
499
 
500
      /* Default to no attributes for type, but let target change that.  */
501
      TYPE_ATTRIBUTES (t) = NULL_TREE;
502
      targetm.set_default_type_attributes (t);
503
 
504
      /* We have not yet computed the alias set for this type.  */
505
      TYPE_ALIAS_SET (t) = -1;
506
      break;
507
 
508
    case tcc_constant:
509
      TREE_CONSTANT (t) = 1;
510
      TREE_INVARIANT (t) = 1;
511
      break;
512
 
513
    case tcc_expression:
514
      switch (code)
515
        {
516
        case INIT_EXPR:
517
        case MODIFY_EXPR:
518
        case VA_ARG_EXPR:
519
        case PREDECREMENT_EXPR:
520
        case PREINCREMENT_EXPR:
521
        case POSTDECREMENT_EXPR:
522
        case POSTINCREMENT_EXPR:
523
          /* All of these have side-effects, no matter what their
524
             operands are.  */
525
          TREE_SIDE_EFFECTS (t) = 1;
526
          break;
527
 
528
        default:
529
          break;
530
        }
531
      break;
532
 
533
    default:
534
      /* Other classes need no special treatment.  */
535
      break;
536
    }
537
 
538
  return t;
539
}
540
 
541
/* Return a new node with the same contents as NODE except that its
542
   TREE_CHAIN is zero and it has a fresh uid.  */
543
 
544
tree
545
copy_node_stat (tree node MEM_STAT_DECL)
546
{
547
  tree t;
548
  enum tree_code code = TREE_CODE (node);
549
  size_t length;
550
 
551
  gcc_assert (code != STATEMENT_LIST);
552
 
553
  length = tree_size (node);
554
  t = ggc_alloc_zone_pass_stat (length, &tree_zone);
555
  memcpy (t, node, length);
556
 
557
  TREE_CHAIN (t) = 0;
558
  TREE_ASM_WRITTEN (t) = 0;
559
  TREE_VISITED (t) = 0;
560
  t->common.ann = 0;
561
 
562
  if (TREE_CODE_CLASS (code) == tcc_declaration)
563
    {
564
      DECL_UID (t) = next_decl_uid++;
565
      if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
566
          && DECL_HAS_VALUE_EXPR_P (node))
567
        {
568
          SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
569
          DECL_HAS_VALUE_EXPR_P (t) = 1;
570
        }
571
      if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
572
        {
573
          SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
574
          DECL_HAS_INIT_PRIORITY_P (t) = 1;
575
        }
576
      if (TREE_CODE (node) == VAR_DECL && DECL_BASED_ON_RESTRICT_P (node))
577
        {
578
          SET_DECL_RESTRICT_BASE (t, DECL_GET_RESTRICT_BASE (node));
579
          DECL_BASED_ON_RESTRICT_P (t) = 1;
580
        }
581
    }
582
  else if (TREE_CODE_CLASS (code) == tcc_type)
583
    {
584
      TYPE_UID (t) = next_type_uid++;
585
      /* The following is so that the debug code for
586
         the copy is different from the original type.
587
         The two statements usually duplicate each other
588
         (because they clear fields of the same union),
589
         but the optimizer should catch that.  */
590
      TYPE_SYMTAB_POINTER (t) = 0;
591
      TYPE_SYMTAB_ADDRESS (t) = 0;
592
 
593
      /* Do not copy the values cache.  */
594
      if (TYPE_CACHED_VALUES_P(t))
595
        {
596
          TYPE_CACHED_VALUES_P (t) = 0;
597
          TYPE_CACHED_VALUES (t) = NULL_TREE;
598
        }
599
    }
600
 
601
  return t;
602
}
603
 
604
/* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
605
   For example, this can copy a list made of TREE_LIST nodes.  */
606
 
607
tree
608
copy_list (tree list)
609
{
610
  tree head;
611
  tree prev, next;
612
 
613
  if (list == 0)
614
    return 0;
615
 
616
  head = prev = copy_node (list);
617
  next = TREE_CHAIN (list);
618
  while (next)
619
    {
620
      TREE_CHAIN (prev) = copy_node (next);
621
      prev = TREE_CHAIN (prev);
622
      next = TREE_CHAIN (next);
623
    }
624
  return head;
625
}
626
 
627
 
628
/* Create an INT_CST node with a LOW value sign extended.  */
629
 
630
tree
631
build_int_cst (tree type, HOST_WIDE_INT low)
632
{
633
  return build_int_cst_wide (type, low, low < 0 ? -1 : 0);
634
}
635
 
636
/* Create an INT_CST node with a LOW value zero extended.  */
637
 
638
tree
639
build_int_cstu (tree type, unsigned HOST_WIDE_INT low)
640
{
641
  return build_int_cst_wide (type, low, 0);
642
}
643
 
644
/* Create an INT_CST node with a LOW value in TYPE.  The value is sign extended
645
   if it is negative.  This function is similar to build_int_cst, but
646
   the extra bits outside of the type precision are cleared.  Constants
647
   with these extra bits may confuse the fold so that it detects overflows
648
   even in cases when they do not occur, and in general should be avoided.
649
   We cannot however make this a default behavior of build_int_cst without
650
   more intrusive changes, since there are parts of gcc that rely on the extra
651
   precision of the integer constants.  */
652
 
653
tree
654
build_int_cst_type (tree type, HOST_WIDE_INT low)
655
{
656
  unsigned HOST_WIDE_INT val = (unsigned HOST_WIDE_INT) low;
657
  unsigned HOST_WIDE_INT hi, mask;
658
  unsigned bits;
659
  bool signed_p;
660
  bool negative;
661
 
662
  if (!type)
663
    type = integer_type_node;
664
 
665
  bits = TYPE_PRECISION (type);
666
  signed_p = !TYPE_UNSIGNED (type);
667
 
668
  if (bits >= HOST_BITS_PER_WIDE_INT)
669
    negative = (low < 0);
670
  else
671
    {
672
      /* If the sign bit is inside precision of LOW, use it to determine
673
         the sign of the constant.  */
674
      negative = ((val >> (bits - 1)) & 1) != 0;
675
 
676
      /* Mask out the bits outside of the precision of the constant.  */
677
      mask = (((unsigned HOST_WIDE_INT) 2) << (bits - 1)) - 1;
678
 
679
      if (signed_p && negative)
680
        val |= ~mask;
681
      else
682
        val &= mask;
683
    }
684
 
685
  /* Determine the high bits.  */
686
  hi = (negative ? ~(unsigned HOST_WIDE_INT) 0 : 0);
687
 
688
  /* For unsigned type we need to mask out the bits outside of the type
689
     precision.  */
690
  if (!signed_p)
691
    {
692
      if (bits <= HOST_BITS_PER_WIDE_INT)
693
        hi = 0;
694
      else
695
        {
696
          bits -= HOST_BITS_PER_WIDE_INT;
697
          mask = (((unsigned HOST_WIDE_INT) 2) << (bits - 1)) - 1;
698
          hi &= mask;
699
        }
700
    }
701
 
702
  return build_int_cst_wide (type, val, hi);
703
}
704
 
705
/* These are the hash table functions for the hash table of INTEGER_CST
706
   nodes of a sizetype.  */
707
 
708
/* Return the hash code code X, an INTEGER_CST.  */
709
 
710
static hashval_t
711
int_cst_hash_hash (const void *x)
712
{
713
  tree t = (tree) x;
714
 
715
  return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
716
          ^ htab_hash_pointer (TREE_TYPE (t)));
717
}
718
 
719
/* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
720
   is the same as that given by *Y, which is the same.  */
721
 
722
static int
723
int_cst_hash_eq (const void *x, const void *y)
724
{
725
  tree xt = (tree) x;
726
  tree yt = (tree) y;
727
 
728
  return (TREE_TYPE (xt) == TREE_TYPE (yt)
729
          && TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt)
730
          && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt));
731
}
732
 
733
/* Create an INT_CST node of TYPE and value HI:LOW.  If TYPE is NULL,
734
   integer_type_node is used.  The returned node is always shared.
735
   For small integers we use a per-type vector cache, for larger ones
736
   we use a single hash table.  */
737
 
738
tree
739
build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
740
{
741
  tree t;
742
  int ix = -1;
743
  int limit = 0;
744
 
745
  if (!type)
746
    type = integer_type_node;
747
 
748
  switch (TREE_CODE (type))
749
    {
750
    case POINTER_TYPE:
751
    case REFERENCE_TYPE:
752
      /* Cache NULL pointer.  */
753
      if (!hi && !low)
754
        {
755
          limit = 1;
756
          ix = 0;
757
        }
758
      break;
759
 
760
    case BOOLEAN_TYPE:
761
      /* Cache false or true.  */
762
      limit = 2;
763
      if (!hi && low < 2)
764
        ix = low;
765
      break;
766
 
767
    case INTEGER_TYPE:
768
    case CHAR_TYPE:
769
    case OFFSET_TYPE:
770
      if (TYPE_UNSIGNED (type))
771
        {
772
          /* Cache 0..N */
773
          limit = INTEGER_SHARE_LIMIT;
774
          if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
775
            ix = low;
776
        }
777
      else
778
        {
779
          /* Cache -1..N */
780
          limit = INTEGER_SHARE_LIMIT + 1;
781
          if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
782
            ix = low + 1;
783
          else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
784
            ix = 0;
785
        }
786
      break;
787
    default:
788
      break;
789
    }
790
 
791
  if (ix >= 0)
792
    {
793
      /* Look for it in the type's vector of small shared ints.  */
794
      if (!TYPE_CACHED_VALUES_P (type))
795
        {
796
          TYPE_CACHED_VALUES_P (type) = 1;
797
          TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
798
        }
799
 
800
      t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
801
      if (t)
802
        {
803
          /* Make sure no one is clobbering the shared constant.  */
804
          gcc_assert (TREE_TYPE (t) == type);
805
          gcc_assert (TREE_INT_CST_LOW (t) == low);
806
          gcc_assert (TREE_INT_CST_HIGH (t) == hi);
807
        }
808
      else
809
        {
810
          /* Create a new shared int.  */
811
          t = make_node (INTEGER_CST);
812
 
813
          TREE_INT_CST_LOW (t) = low;
814
          TREE_INT_CST_HIGH (t) = hi;
815
          TREE_TYPE (t) = type;
816
 
817
          TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
818
        }
819
    }
820
  else
821
    {
822
      /* Use the cache of larger shared ints.  */
823
      void **slot;
824
 
825
      TREE_INT_CST_LOW (int_cst_node) = low;
826
      TREE_INT_CST_HIGH (int_cst_node) = hi;
827
      TREE_TYPE (int_cst_node) = type;
828
 
829
      slot = htab_find_slot (int_cst_hash_table, int_cst_node, INSERT);
830
      t = *slot;
831
      if (!t)
832
        {
833
          /* Insert this one into the hash table.  */
834
          t = int_cst_node;
835
          *slot = t;
836
          /* Make a new node for next time round.  */
837
          int_cst_node = make_node (INTEGER_CST);
838
        }
839
    }
840
 
841
  return t;
842
}
843
 
844
/* Builds an integer constant in TYPE such that lowest BITS bits are ones
845
   and the rest are zeros.  */
846
 
847
tree
848
build_low_bits_mask (tree type, unsigned bits)
849
{
850
  unsigned HOST_WIDE_INT low;
851
  HOST_WIDE_INT high;
852
  unsigned HOST_WIDE_INT all_ones = ~(unsigned HOST_WIDE_INT) 0;
853
 
854
  gcc_assert (bits <= TYPE_PRECISION (type));
855
 
856
  if (bits == TYPE_PRECISION (type)
857
      && !TYPE_UNSIGNED (type))
858
    {
859
      /* Sign extended all-ones mask.  */
860
      low = all_ones;
861
      high = -1;
862
    }
863
  else if (bits <= HOST_BITS_PER_WIDE_INT)
864
    {
865
      low = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
866
      high = 0;
867
    }
868
  else
869
    {
870
      bits -= HOST_BITS_PER_WIDE_INT;
871
      low = all_ones;
872
      high = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
873
    }
874
 
875
  return build_int_cst_wide (type, low, high);
876
}
877
 
878
/* Checks that X is integer constant that can be expressed in (unsigned)
879
   HOST_WIDE_INT without loss of precision.  */
880
 
881
bool
882
cst_and_fits_in_hwi (tree x)
883
{
884
  if (TREE_CODE (x) != INTEGER_CST)
885
    return false;
886
 
887
  if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
888
    return false;
889
 
890
  return (TREE_INT_CST_HIGH (x) == 0
891
          || TREE_INT_CST_HIGH (x) == -1);
892
}
893
 
894
/* Return a new VECTOR_CST node whose type is TYPE and whose values
895
   are in a list pointed to by VALS.  */
896
 
897
tree
898
build_vector (tree type, tree vals)
899
{
900
  tree v = make_node (VECTOR_CST);
901
  int over1 = 0, over2 = 0;
902
  tree link;
903
 
904
  TREE_VECTOR_CST_ELTS (v) = vals;
905
  TREE_TYPE (v) = type;
906
 
907
  /* Iterate through elements and check for overflow.  */
908
  for (link = vals; link; link = TREE_CHAIN (link))
909
    {
910
      tree value = TREE_VALUE (link);
911
 
912
      over1 |= TREE_OVERFLOW (value);
913
      over2 |= TREE_CONSTANT_OVERFLOW (value);
914
    }
915
 
916
  TREE_OVERFLOW (v) = over1;
917
  TREE_CONSTANT_OVERFLOW (v) = over2;
918
 
919
  return v;
920
}
921
 
922
/* Return a new VECTOR_CST node whose type is TYPE and whose values
923
   are extracted from V, a vector of CONSTRUCTOR_ELT.  */
924
 
925
tree
926
build_vector_from_ctor (tree type, VEC(constructor_elt,gc) *v)
927
{
928
  tree list = NULL_TREE;
929
  unsigned HOST_WIDE_INT idx;
930
  tree value;
931
 
932
  FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
933
    list = tree_cons (NULL_TREE, value, list);
934
  return build_vector (type, nreverse (list));
935
}
936
 
937
/* Return a new CONSTRUCTOR node whose type is TYPE and whose values
938
   are in the VEC pointed to by VALS.  */
939
tree
940
build_constructor (tree type, VEC(constructor_elt,gc) *vals)
941
{
942
  tree c = make_node (CONSTRUCTOR);
943
  TREE_TYPE (c) = type;
944
  CONSTRUCTOR_ELTS (c) = vals;
945
  return c;
946
}
947
 
948
/* Build a CONSTRUCTOR node made of a single initializer, with the specified
949
   INDEX and VALUE.  */
950
tree
951
build_constructor_single (tree type, tree index, tree value)
952
{
953
  VEC(constructor_elt,gc) *v;
954
  constructor_elt *elt;
955
 
956
  v = VEC_alloc (constructor_elt, gc, 1);
957
  elt = VEC_quick_push (constructor_elt, v, NULL);
958
  elt->index = index;
959
  elt->value = value;
960
 
961
  return build_constructor (type, v);
962
}
963
 
964
 
965
/* Return a new CONSTRUCTOR node whose type is TYPE and whose values
966
   are in a list pointed to by VALS.  */
967
tree
968
build_constructor_from_list (tree type, tree vals)
969
{
970
  tree t;
971
  VEC(constructor_elt,gc) *v = NULL;
972
 
973
  if (vals)
974
    {
975
      v = VEC_alloc (constructor_elt, gc, list_length (vals));
976
      for (t = vals; t; t = TREE_CHAIN (t))
977
        {
978
          constructor_elt *elt = VEC_quick_push (constructor_elt, v, NULL);
979
          elt->index = TREE_PURPOSE (t);
980
          elt->value = TREE_VALUE (t);
981
        }
982
    }
983
 
984
  return build_constructor (type, v);
985
}
986
 
987
 
988
/* Return a new REAL_CST node whose type is TYPE and value is D.  */
989
 
990
tree
991
build_real (tree type, REAL_VALUE_TYPE d)
992
{
993
  tree v;
994
  REAL_VALUE_TYPE *dp;
995
  int overflow = 0;
996
 
997
  /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
998
     Consider doing it via real_convert now.  */
999
 
1000
  v = make_node (REAL_CST);
1001
  dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
1002
  memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1003
 
1004
  TREE_TYPE (v) = type;
1005
  TREE_REAL_CST_PTR (v) = dp;
1006
  TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
1007
  return v;
1008
}
1009
 
1010
/* Return a new REAL_CST node whose type is TYPE
1011
   and whose value is the integer value of the INTEGER_CST node I.  */
1012
 
1013
REAL_VALUE_TYPE
1014
real_value_from_int_cst (tree type, tree i)
1015
{
1016
  REAL_VALUE_TYPE d;
1017
 
1018
  /* Clear all bits of the real value type so that we can later do
1019
     bitwise comparisons to see if two values are the same.  */
1020
  memset (&d, 0, sizeof d);
1021
 
1022
  real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
1023
                     TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1024
                     TYPE_UNSIGNED (TREE_TYPE (i)));
1025
  return d;
1026
}
1027
 
1028
/* Given a tree representing an integer constant I, return a tree
1029
   representing the same value as a floating-point constant of type TYPE.  */
1030
 
1031
tree
1032
build_real_from_int_cst (tree type, tree i)
1033
{
1034
  tree v;
1035
  int overflow = TREE_OVERFLOW (i);
1036
 
1037
  v = build_real (type, real_value_from_int_cst (type, i));
1038
 
1039
  TREE_OVERFLOW (v) |= overflow;
1040
  TREE_CONSTANT_OVERFLOW (v) |= overflow;
1041
  return v;
1042
}
1043
 
1044
/* Return a newly constructed STRING_CST node whose value is
1045
   the LEN characters at STR.
1046
   The TREE_TYPE is not initialized.  */
1047
 
1048
tree
1049
build_string (int len, const char *str)
1050
{
1051
  tree s;
1052
  size_t length;
1053
 
1054
  length = len + sizeof (struct tree_string);
1055
 
1056
#ifdef GATHER_STATISTICS
1057
  tree_node_counts[(int) c_kind]++;
1058
  tree_node_sizes[(int) c_kind] += length;
1059
#endif  
1060
 
1061
  s = ggc_alloc_tree (length);
1062
 
1063
  memset (s, 0, sizeof (struct tree_common));
1064
  TREE_SET_CODE (s, STRING_CST);
1065
  TREE_CONSTANT (s) = 1;
1066
  TREE_INVARIANT (s) = 1;
1067
  TREE_STRING_LENGTH (s) = len;
1068
  memcpy ((char *) TREE_STRING_POINTER (s), str, len);
1069
  ((char *) TREE_STRING_POINTER (s))[len] = '\0';
1070
 
1071
  return s;
1072
}
1073
 
1074
/* Return a newly constructed COMPLEX_CST node whose value is
1075
   specified by the real and imaginary parts REAL and IMAG.
1076
   Both REAL and IMAG should be constant nodes.  TYPE, if specified,
1077
   will be the type of the COMPLEX_CST; otherwise a new type will be made.  */
1078
 
1079
tree
1080
build_complex (tree type, tree real, tree imag)
1081
{
1082
  tree t = make_node (COMPLEX_CST);
1083
 
1084
  TREE_REALPART (t) = real;
1085
  TREE_IMAGPART (t) = imag;
1086
  TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1087
  TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1088
  TREE_CONSTANT_OVERFLOW (t)
1089
    = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
1090
  return t;
1091
}
1092
 
1093
/* Build a BINFO with LEN language slots.  */
1094
 
1095
tree
1096
make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
1097
{
1098
  tree t;
1099
  size_t length = (offsetof (struct tree_binfo, base_binfos)
1100
                   + VEC_embedded_size (tree, base_binfos));
1101
 
1102
#ifdef GATHER_STATISTICS
1103
  tree_node_counts[(int) binfo_kind]++;
1104
  tree_node_sizes[(int) binfo_kind] += length;
1105
#endif
1106
 
1107
  t = ggc_alloc_zone_pass_stat (length, &tree_zone);
1108
 
1109
  memset (t, 0, offsetof (struct tree_binfo, base_binfos));
1110
 
1111
  TREE_SET_CODE (t, TREE_BINFO);
1112
 
1113
  VEC_embedded_init (tree, BINFO_BASE_BINFOS (t), base_binfos);
1114
 
1115
  return t;
1116
}
1117
 
1118
 
1119
/* Build a newly constructed TREE_VEC node of length LEN.  */
1120
 
1121
tree
1122
make_tree_vec_stat (int len MEM_STAT_DECL)
1123
{
1124
  tree t;
1125
  int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
1126
 
1127
#ifdef GATHER_STATISTICS
1128
  tree_node_counts[(int) vec_kind]++;
1129
  tree_node_sizes[(int) vec_kind] += length;
1130
#endif
1131
 
1132
  t = ggc_alloc_zone_pass_stat (length, &tree_zone);
1133
 
1134
  memset (t, 0, length);
1135
 
1136
  TREE_SET_CODE (t, TREE_VEC);
1137
  TREE_VEC_LENGTH (t) = len;
1138
 
1139
  return t;
1140
}
1141
 
1142
/* Return 1 if EXPR is the integer constant zero or a complex constant
1143
   of zero.  */
1144
 
1145
int
1146
integer_zerop (tree expr)
1147
{
1148
  STRIP_NOPS (expr);
1149
 
1150
  return ((TREE_CODE (expr) == INTEGER_CST
1151
           && ! TREE_CONSTANT_OVERFLOW (expr)
1152
           && TREE_INT_CST_LOW (expr) == 0
1153
           && TREE_INT_CST_HIGH (expr) == 0)
1154
          || (TREE_CODE (expr) == COMPLEX_CST
1155
              && integer_zerop (TREE_REALPART (expr))
1156
              && integer_zerop (TREE_IMAGPART (expr))));
1157
}
1158
 
1159
/* Return 1 if EXPR is the integer constant one or the corresponding
1160
   complex constant.  */
1161
 
1162
int
1163
integer_onep (tree expr)
1164
{
1165
  STRIP_NOPS (expr);
1166
 
1167
  return ((TREE_CODE (expr) == INTEGER_CST
1168
           && ! TREE_CONSTANT_OVERFLOW (expr)
1169
           && TREE_INT_CST_LOW (expr) == 1
1170
           && TREE_INT_CST_HIGH (expr) == 0)
1171
          || (TREE_CODE (expr) == COMPLEX_CST
1172
              && integer_onep (TREE_REALPART (expr))
1173
              && integer_zerop (TREE_IMAGPART (expr))));
1174
}
1175
 
1176
/* Return 1 if EXPR is an integer containing all 1's in as much precision as
1177
   it contains.  Likewise for the corresponding complex constant.  */
1178
 
1179
int
1180
integer_all_onesp (tree expr)
1181
{
1182
  int prec;
1183
  int uns;
1184
 
1185
  STRIP_NOPS (expr);
1186
 
1187
  if (TREE_CODE (expr) == COMPLEX_CST
1188
      && integer_all_onesp (TREE_REALPART (expr))
1189
      && integer_zerop (TREE_IMAGPART (expr)))
1190
    return 1;
1191
 
1192
  else if (TREE_CODE (expr) != INTEGER_CST
1193
           || TREE_CONSTANT_OVERFLOW (expr))
1194
    return 0;
1195
 
1196
  uns = TYPE_UNSIGNED (TREE_TYPE (expr));
1197
  if (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1198
      && TREE_INT_CST_HIGH (expr) == -1)
1199
    return 1;
1200
  if (!uns)
1201
    return 0;
1202
 
1203
  /* Note that using TYPE_PRECISION here is wrong.  We care about the
1204
     actual bits, not the (arbitrary) range of the type.  */
1205
  prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1206
  if (prec >= HOST_BITS_PER_WIDE_INT)
1207
    {
1208
      HOST_WIDE_INT high_value;
1209
      int shift_amount;
1210
 
1211
      shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1212
 
1213
      /* Can not handle precisions greater than twice the host int size.  */
1214
      gcc_assert (shift_amount <= HOST_BITS_PER_WIDE_INT);
1215
      if (shift_amount == HOST_BITS_PER_WIDE_INT)
1216
        /* Shifting by the host word size is undefined according to the ANSI
1217
           standard, so we must handle this as a special case.  */
1218
        high_value = -1;
1219
      else
1220
        high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1221
 
1222
      return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1223
              && TREE_INT_CST_HIGH (expr) == high_value);
1224
    }
1225
  else
1226
    return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
1227
}
1228
 
1229
/* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1230
   one bit on).  */
1231
 
1232
int
1233
integer_pow2p (tree expr)
1234
{
1235
  int prec;
1236
  HOST_WIDE_INT high, low;
1237
 
1238
  STRIP_NOPS (expr);
1239
 
1240
  if (TREE_CODE (expr) == COMPLEX_CST
1241
      && integer_pow2p (TREE_REALPART (expr))
1242
      && integer_zerop (TREE_IMAGPART (expr)))
1243
    return 1;
1244
 
1245
  if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
1246
    return 0;
1247
 
1248
  prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1249
          ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1250
  high = TREE_INT_CST_HIGH (expr);
1251
  low = TREE_INT_CST_LOW (expr);
1252
 
1253
  /* First clear all bits that are beyond the type's precision in case
1254
     we've been sign extended.  */
1255
 
1256
  if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1257
    ;
1258
  else if (prec > HOST_BITS_PER_WIDE_INT)
1259
    high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1260
  else
1261
    {
1262
      high = 0;
1263
      if (prec < HOST_BITS_PER_WIDE_INT)
1264
        low &= ~((HOST_WIDE_INT) (-1) << prec);
1265
    }
1266
 
1267
  if (high == 0 && low == 0)
1268
    return 0;
1269
 
1270
  return ((high == 0 && (low & (low - 1)) == 0)
1271
          || (low == 0 && (high & (high - 1)) == 0));
1272
}
1273
 
1274
/* Return 1 if EXPR is an integer constant other than zero or a
1275
   complex constant other than zero.  */
1276
 
1277
int
1278
integer_nonzerop (tree expr)
1279
{
1280
  STRIP_NOPS (expr);
1281
 
1282
  return ((TREE_CODE (expr) == INTEGER_CST
1283
           && ! TREE_CONSTANT_OVERFLOW (expr)
1284
           && (TREE_INT_CST_LOW (expr) != 0
1285
               || TREE_INT_CST_HIGH (expr) != 0))
1286
          || (TREE_CODE (expr) == COMPLEX_CST
1287
              && (integer_nonzerop (TREE_REALPART (expr))
1288
                  || integer_nonzerop (TREE_IMAGPART (expr)))));
1289
}
1290
 
1291
/* Return the power of two represented by a tree node known to be a
1292
   power of two.  */
1293
 
1294
int
1295
tree_log2 (tree expr)
1296
{
1297
  int prec;
1298
  HOST_WIDE_INT high, low;
1299
 
1300
  STRIP_NOPS (expr);
1301
 
1302
  if (TREE_CODE (expr) == COMPLEX_CST)
1303
    return tree_log2 (TREE_REALPART (expr));
1304
 
1305
  prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1306
          ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1307
 
1308
  high = TREE_INT_CST_HIGH (expr);
1309
  low = TREE_INT_CST_LOW (expr);
1310
 
1311
  /* First clear all bits that are beyond the type's precision in case
1312
     we've been sign extended.  */
1313
 
1314
  if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1315
    ;
1316
  else if (prec > HOST_BITS_PER_WIDE_INT)
1317
    high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1318
  else
1319
    {
1320
      high = 0;
1321
      if (prec < HOST_BITS_PER_WIDE_INT)
1322
        low &= ~((HOST_WIDE_INT) (-1) << prec);
1323
    }
1324
 
1325
  return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1326
          : exact_log2 (low));
1327
}
1328
 
1329
/* Similar, but return the largest integer Y such that 2 ** Y is less
1330
   than or equal to EXPR.  */
1331
 
1332
int
1333
tree_floor_log2 (tree expr)
1334
{
1335
  int prec;
1336
  HOST_WIDE_INT high, low;
1337
 
1338
  STRIP_NOPS (expr);
1339
 
1340
  if (TREE_CODE (expr) == COMPLEX_CST)
1341
    return tree_log2 (TREE_REALPART (expr));
1342
 
1343
  prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1344
          ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1345
 
1346
  high = TREE_INT_CST_HIGH (expr);
1347
  low = TREE_INT_CST_LOW (expr);
1348
 
1349
  /* First clear all bits that are beyond the type's precision in case
1350
     we've been sign extended.  Ignore if type's precision hasn't been set
1351
     since what we are doing is setting it.  */
1352
 
1353
  if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
1354
    ;
1355
  else if (prec > HOST_BITS_PER_WIDE_INT)
1356
    high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1357
  else
1358
    {
1359
      high = 0;
1360
      if (prec < HOST_BITS_PER_WIDE_INT)
1361
        low &= ~((HOST_WIDE_INT) (-1) << prec);
1362
    }
1363
 
1364
  return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
1365
          : floor_log2 (low));
1366
}
1367
 
1368
/* Return 1 if EXPR is the real constant zero.  */
1369
 
1370
int
1371
real_zerop (tree expr)
1372
{
1373
  STRIP_NOPS (expr);
1374
 
1375
  return ((TREE_CODE (expr) == REAL_CST
1376
           && ! TREE_CONSTANT_OVERFLOW (expr)
1377
           && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
1378
          || (TREE_CODE (expr) == COMPLEX_CST
1379
              && real_zerop (TREE_REALPART (expr))
1380
              && real_zerop (TREE_IMAGPART (expr))));
1381
}
1382
 
1383
/* Return 1 if EXPR is the real constant one in real or complex form.  */
1384
 
1385
int
1386
real_onep (tree expr)
1387
{
1388
  STRIP_NOPS (expr);
1389
 
1390
  return ((TREE_CODE (expr) == REAL_CST
1391
           && ! TREE_CONSTANT_OVERFLOW (expr)
1392
           && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
1393
          || (TREE_CODE (expr) == COMPLEX_CST
1394
              && real_onep (TREE_REALPART (expr))
1395
              && real_zerop (TREE_IMAGPART (expr))));
1396
}
1397
 
1398
/* Return 1 if EXPR is the real constant two.  */
1399
 
1400
int
1401
real_twop (tree expr)
1402
{
1403
  STRIP_NOPS (expr);
1404
 
1405
  return ((TREE_CODE (expr) == REAL_CST
1406
           && ! TREE_CONSTANT_OVERFLOW (expr)
1407
           && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
1408
          || (TREE_CODE (expr) == COMPLEX_CST
1409
              && real_twop (TREE_REALPART (expr))
1410
              && real_zerop (TREE_IMAGPART (expr))));
1411
}
1412
 
1413
/* Return 1 if EXPR is the real constant minus one.  */
1414
 
1415
int
1416
real_minus_onep (tree expr)
1417
{
1418
  STRIP_NOPS (expr);
1419
 
1420
  return ((TREE_CODE (expr) == REAL_CST
1421
           && ! TREE_CONSTANT_OVERFLOW (expr)
1422
           && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1))
1423
          || (TREE_CODE (expr) == COMPLEX_CST
1424
              && real_minus_onep (TREE_REALPART (expr))
1425
              && real_zerop (TREE_IMAGPART (expr))));
1426
}
1427
 
1428
/* Nonzero if EXP is a constant or a cast of a constant.  */
1429
 
1430
int
1431
really_constant_p (tree exp)
1432
{
1433
  /* This is not quite the same as STRIP_NOPS.  It does more.  */
1434
  while (TREE_CODE (exp) == NOP_EXPR
1435
         || TREE_CODE (exp) == CONVERT_EXPR
1436
         || TREE_CODE (exp) == NON_LVALUE_EXPR)
1437
    exp = TREE_OPERAND (exp, 0);
1438
  return TREE_CONSTANT (exp);
1439
}
1440
 
1441
/* Return first list element whose TREE_VALUE is ELEM.
1442
   Return 0 if ELEM is not in LIST.  */
1443
 
1444
tree
1445
value_member (tree elem, tree list)
1446
{
1447
  while (list)
1448
    {
1449
      if (elem == TREE_VALUE (list))
1450
        return list;
1451
      list = TREE_CHAIN (list);
1452
    }
1453
  return NULL_TREE;
1454
}
1455
 
1456
/* Return first list element whose TREE_PURPOSE is ELEM.
1457
   Return 0 if ELEM is not in LIST.  */
1458
 
1459
tree
1460
purpose_member (tree elem, tree list)
1461
{
1462
  while (list)
1463
    {
1464
      if (elem == TREE_PURPOSE (list))
1465
        return list;
1466
      list = TREE_CHAIN (list);
1467
    }
1468
  return NULL_TREE;
1469
}
1470
 
1471
/* Return nonzero if ELEM is part of the chain CHAIN.  */
1472
 
1473
int
1474
chain_member (tree elem, tree chain)
1475
{
1476
  while (chain)
1477
    {
1478
      if (elem == chain)
1479
        return 1;
1480
      chain = TREE_CHAIN (chain);
1481
    }
1482
 
1483
  return 0;
1484
}
1485
 
1486
/* Return the length of a chain of nodes chained through TREE_CHAIN.
1487
   We expect a null pointer to mark the end of the chain.
1488
   This is the Lisp primitive `length'.  */
1489
 
1490
int
1491
list_length (tree t)
1492
{
1493
  tree p = t;
1494
#ifdef ENABLE_TREE_CHECKING
1495
  tree q = t;
1496
#endif
1497
  int len = 0;
1498
 
1499
  while (p)
1500
    {
1501
      p = TREE_CHAIN (p);
1502
#ifdef ENABLE_TREE_CHECKING
1503
      if (len % 2)
1504
        q = TREE_CHAIN (q);
1505
      gcc_assert (p != q);
1506
#endif
1507
      len++;
1508
    }
1509
 
1510
  return len;
1511
}
1512
 
1513
/* Returns the number of FIELD_DECLs in TYPE.  */
1514
 
1515
int
1516
fields_length (tree type)
1517
{
1518
  tree t = TYPE_FIELDS (type);
1519
  int count = 0;
1520
 
1521
  for (; t; t = TREE_CHAIN (t))
1522
    if (TREE_CODE (t) == FIELD_DECL)
1523
      ++count;
1524
 
1525
  return count;
1526
}
1527
 
1528
/* Concatenate two chains of nodes (chained through TREE_CHAIN)
1529
   by modifying the last node in chain 1 to point to chain 2.
1530
   This is the Lisp primitive `nconc'.  */
1531
 
1532
tree
1533
chainon (tree op1, tree op2)
1534
{
1535
  tree t1;
1536
 
1537
  if (!op1)
1538
    return op2;
1539
  if (!op2)
1540
    return op1;
1541
 
1542
  for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1543
    continue;
1544
  TREE_CHAIN (t1) = op2;
1545
 
1546
#ifdef ENABLE_TREE_CHECKING
1547
  {
1548
    tree t2;
1549
    for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1550
      gcc_assert (t2 != t1);
1551
  }
1552
#endif
1553
 
1554
  return op1;
1555
}
1556
 
1557
/* Return the last node in a chain of nodes (chained through TREE_CHAIN).  */
1558
 
1559
tree
1560
tree_last (tree chain)
1561
{
1562
  tree next;
1563
  if (chain)
1564
    while ((next = TREE_CHAIN (chain)))
1565
      chain = next;
1566
  return chain;
1567
}
1568
 
1569
/* Reverse the order of elements in the chain T,
1570
   and return the new head of the chain (old last element).  */
1571
 
1572
tree
1573
nreverse (tree t)
1574
{
1575
  tree prev = 0, decl, next;
1576
  for (decl = t; decl; decl = next)
1577
    {
1578
      next = TREE_CHAIN (decl);
1579
      TREE_CHAIN (decl) = prev;
1580
      prev = decl;
1581
    }
1582
  return prev;
1583
}
1584
 
1585
/* Return a newly created TREE_LIST node whose
1586
   purpose and value fields are PARM and VALUE.  */
1587
 
1588
tree
1589
build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
1590
{
1591
  tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
1592
  TREE_PURPOSE (t) = parm;
1593
  TREE_VALUE (t) = value;
1594
  return t;
1595
}
1596
 
1597
/* Return a newly created TREE_LIST node whose
1598
   purpose and value fields are PURPOSE and VALUE
1599
   and whose TREE_CHAIN is CHAIN.  */
1600
 
1601
tree
1602
tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
1603
{
1604
  tree node;
1605
 
1606
  node = ggc_alloc_zone_pass_stat (sizeof (struct tree_list), &tree_zone);
1607
 
1608
  memset (node, 0, sizeof (struct tree_common));
1609
 
1610
#ifdef GATHER_STATISTICS
1611
  tree_node_counts[(int) x_kind]++;
1612
  tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
1613
#endif
1614
 
1615
  TREE_SET_CODE (node, TREE_LIST);
1616
  TREE_CHAIN (node) = chain;
1617
  TREE_PURPOSE (node) = purpose;
1618
  TREE_VALUE (node) = value;
1619
  return node;
1620
}
1621
 
1622
 
1623
/* Return the size nominally occupied by an object of type TYPE
1624
   when it resides in memory.  The value is measured in units of bytes,
1625
   and its data type is that normally used for type sizes
1626
   (which is the first type created by make_signed_type or
1627
   make_unsigned_type).  */
1628
 
1629
tree
1630
size_in_bytes (tree type)
1631
{
1632
  tree t;
1633
 
1634
  if (type == error_mark_node)
1635
    return integer_zero_node;
1636
 
1637
  type = TYPE_MAIN_VARIANT (type);
1638
  t = TYPE_SIZE_UNIT (type);
1639
 
1640
  if (t == 0)
1641
    {
1642
      lang_hooks.types.incomplete_type_error (NULL_TREE, type);
1643
      return size_zero_node;
1644
    }
1645
 
1646
  if (TREE_CODE (t) == INTEGER_CST)
1647
    t = force_fit_type (t, 0, false, false);
1648
 
1649
  return t;
1650
}
1651
 
1652
/* Return the size of TYPE (in bytes) as a wide integer
1653
   or return -1 if the size can vary or is larger than an integer.  */
1654
 
1655
HOST_WIDE_INT
1656
int_size_in_bytes (tree type)
1657
{
1658
  tree t;
1659
 
1660
  if (type == error_mark_node)
1661
    return 0;
1662
 
1663
  type = TYPE_MAIN_VARIANT (type);
1664
  t = TYPE_SIZE_UNIT (type);
1665
  if (t == 0
1666
      || TREE_CODE (t) != INTEGER_CST
1667
      || TREE_OVERFLOW (t)
1668
      || TREE_INT_CST_HIGH (t) != 0
1669
      /* If the result would appear negative, it's too big to represent.  */
1670
      || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
1671
    return -1;
1672
 
1673
  return TREE_INT_CST_LOW (t);
1674
}
1675
 
1676
/* Return the bit position of FIELD, in bits from the start of the record.
1677
   This is a tree of type bitsizetype.  */
1678
 
1679
tree
1680
bit_position (tree field)
1681
{
1682
  return bit_from_pos (DECL_FIELD_OFFSET (field),
1683
                       DECL_FIELD_BIT_OFFSET (field));
1684
}
1685
 
1686
/* Likewise, but return as an integer.  It must be representable in
1687
   that way (since it could be a signed value, we don't have the
1688
   option of returning -1 like int_size_in_byte can.  */
1689
 
1690
HOST_WIDE_INT
1691
int_bit_position (tree field)
1692
{
1693
  return tree_low_cst (bit_position (field), 0);
1694
}
1695
 
1696
/* Return the byte position of FIELD, in bytes from the start of the record.
1697
   This is a tree of type sizetype.  */
1698
 
1699
tree
1700
byte_position (tree field)
1701
{
1702
  return byte_from_pos (DECL_FIELD_OFFSET (field),
1703
                        DECL_FIELD_BIT_OFFSET (field));
1704
}
1705
 
1706
/* Likewise, but return as an integer.  It must be representable in
1707
   that way (since it could be a signed value, we don't have the
1708
   option of returning -1 like int_size_in_byte can.  */
1709
 
1710
HOST_WIDE_INT
1711
int_byte_position (tree field)
1712
{
1713
  return tree_low_cst (byte_position (field), 0);
1714
}
1715
 
1716
/* Return the strictest alignment, in bits, that T is known to have.  */
1717
 
1718
unsigned int
1719
expr_align (tree t)
1720
{
1721
  unsigned int align0, align1;
1722
 
1723
  switch (TREE_CODE (t))
1724
    {
1725
    case NOP_EXPR:  case CONVERT_EXPR:  case NON_LVALUE_EXPR:
1726
      /* If we have conversions, we know that the alignment of the
1727
         object must meet each of the alignments of the types.  */
1728
      align0 = expr_align (TREE_OPERAND (t, 0));
1729
      align1 = TYPE_ALIGN (TREE_TYPE (t));
1730
      return MAX (align0, align1);
1731
 
1732
    case SAVE_EXPR:         case COMPOUND_EXPR:       case MODIFY_EXPR:
1733
    case INIT_EXPR:         case TARGET_EXPR:         case WITH_CLEANUP_EXPR:
1734
    case CLEANUP_POINT_EXPR:
1735
      /* These don't change the alignment of an object.  */
1736
      return expr_align (TREE_OPERAND (t, 0));
1737
 
1738
    case COND_EXPR:
1739
      /* The best we can do is say that the alignment is the least aligned
1740
         of the two arms.  */
1741
      align0 = expr_align (TREE_OPERAND (t, 1));
1742
      align1 = expr_align (TREE_OPERAND (t, 2));
1743
      return MIN (align0, align1);
1744
 
1745
    case LABEL_DECL:     case CONST_DECL:
1746
    case VAR_DECL:       case PARM_DECL:   case RESULT_DECL:
1747
      if (DECL_ALIGN (t) != 0)
1748
        return DECL_ALIGN (t);
1749
      break;
1750
 
1751
    case FUNCTION_DECL:
1752
      return FUNCTION_BOUNDARY;
1753
 
1754
    default:
1755
      break;
1756
    }
1757
 
1758
  /* Otherwise take the alignment from that of the type.  */
1759
  return TYPE_ALIGN (TREE_TYPE (t));
1760
}
1761
 
1762
/* Return, as a tree node, the number of elements for TYPE (which is an
1763
   ARRAY_TYPE) minus one. This counts only elements of the top array.  */
1764
 
1765
tree
1766
array_type_nelts (tree type)
1767
{
1768
  tree index_type, min, max;
1769
 
1770
  /* If they did it with unspecified bounds, then we should have already
1771
     given an error about it before we got here.  */
1772
  if (! TYPE_DOMAIN (type))
1773
    return error_mark_node;
1774
 
1775
  index_type = TYPE_DOMAIN (type);
1776
  min = TYPE_MIN_VALUE (index_type);
1777
  max = TYPE_MAX_VALUE (index_type);
1778
 
1779
  return (integer_zerop (min)
1780
          ? max
1781
          : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
1782
}
1783
 
1784
/* If arg is static -- a reference to an object in static storage -- then
1785
   return the object.  This is not the same as the C meaning of `static'.
1786
   If arg isn't static, return NULL.  */
1787
 
1788
tree
1789
staticp (tree arg)
1790
{
1791
  switch (TREE_CODE (arg))
1792
    {
1793
    case FUNCTION_DECL:
1794
      /* Nested functions are static, even though taking their address will
1795
         involve a trampoline as we unnest the nested function and create
1796
         the trampoline on the tree level.  */
1797
      return arg;
1798
 
1799
    case VAR_DECL:
1800
      return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1801
              && ! DECL_THREAD_LOCAL_P (arg)
1802
              && ! DECL_DLLIMPORT_P (arg)
1803
              ? arg : NULL);
1804
 
1805
    case CONST_DECL:
1806
      return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1807
              ? arg : NULL);
1808
 
1809
    case CONSTRUCTOR:
1810
      return TREE_STATIC (arg) ? arg : NULL;
1811
 
1812
    case LABEL_DECL:
1813
    case STRING_CST:
1814
      return arg;
1815
 
1816
    case COMPONENT_REF:
1817
      /* If the thing being referenced is not a field, then it is
1818
         something language specific.  */
1819
      if (TREE_CODE (TREE_OPERAND (arg, 1)) != FIELD_DECL)
1820
        return (*lang_hooks.staticp) (arg);
1821
 
1822
      /* If we are referencing a bitfield, we can't evaluate an
1823
         ADDR_EXPR at compile time and so it isn't a constant.  */
1824
      if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
1825
        return NULL;
1826
 
1827
      return staticp (TREE_OPERAND (arg, 0));
1828
 
1829
    case BIT_FIELD_REF:
1830
      return NULL;
1831
 
1832
    case MISALIGNED_INDIRECT_REF:
1833
    case ALIGN_INDIRECT_REF:
1834
    case INDIRECT_REF:
1835
      return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
1836
 
1837
    case ARRAY_REF:
1838
    case ARRAY_RANGE_REF:
1839
      if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
1840
          && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
1841
        return staticp (TREE_OPERAND (arg, 0));
1842
      else
1843
        return false;
1844
 
1845
    default:
1846
      if ((unsigned int) TREE_CODE (arg)
1847
          >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
1848
        return lang_hooks.staticp (arg);
1849
      else
1850
        return NULL;
1851
    }
1852
}
1853
 
1854
/* Wrap a SAVE_EXPR around EXPR, if appropriate.
1855
   Do this to any expression which may be used in more than one place,
1856
   but must be evaluated only once.
1857
 
1858
   Normally, expand_expr would reevaluate the expression each time.
1859
   Calling save_expr produces something that is evaluated and recorded
1860
   the first time expand_expr is called on it.  Subsequent calls to
1861
   expand_expr just reuse the recorded value.
1862
 
1863
   The call to expand_expr that generates code that actually computes
1864
   the value is the first call *at compile time*.  Subsequent calls
1865
   *at compile time* generate code to use the saved value.
1866
   This produces correct result provided that *at run time* control
1867
   always flows through the insns made by the first expand_expr
1868
   before reaching the other places where the save_expr was evaluated.
1869
   You, the caller of save_expr, must make sure this is so.
1870
 
1871
   Constants, and certain read-only nodes, are returned with no
1872
   SAVE_EXPR because that is safe.  Expressions containing placeholders
1873
   are not touched; see tree.def for an explanation of what these
1874
   are used for.  */
1875
 
1876
tree
1877
save_expr (tree expr)
1878
{
1879
  tree t = fold (expr);
1880
  tree inner;
1881
 
1882
  /* If the tree evaluates to a constant, then we don't want to hide that
1883
     fact (i.e. this allows further folding, and direct checks for constants).
1884
     However, a read-only object that has side effects cannot be bypassed.
1885
     Since it is no problem to reevaluate literals, we just return the
1886
     literal node.  */
1887
  inner = skip_simple_arithmetic (t);
1888
 
1889
  if (TREE_INVARIANT (inner)
1890
      || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
1891
      || TREE_CODE (inner) == SAVE_EXPR
1892
      || TREE_CODE (inner) == ERROR_MARK)
1893
    return t;
1894
 
1895
  /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
1896
     it means that the size or offset of some field of an object depends on
1897
     the value within another field.
1898
 
1899
     Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
1900
     and some variable since it would then need to be both evaluated once and
1901
     evaluated more than once.  Front-ends must assure this case cannot
1902
     happen by surrounding any such subexpressions in their own SAVE_EXPR
1903
     and forcing evaluation at the proper time.  */
1904
  if (contains_placeholder_p (inner))
1905
    return t;
1906
 
1907
  t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
1908
 
1909
  /* This expression might be placed ahead of a jump to ensure that the
1910
     value was computed on both sides of the jump.  So make sure it isn't
1911
     eliminated as dead.  */
1912
  TREE_SIDE_EFFECTS (t) = 1;
1913
  TREE_INVARIANT (t) = 1;
1914
  return t;
1915
}
1916
 
1917
/* Look inside EXPR and into any simple arithmetic operations.  Return
1918
   the innermost non-arithmetic node.  */
1919
 
1920
tree
1921
skip_simple_arithmetic (tree expr)
1922
{
1923
  tree inner;
1924
 
1925
  /* We don't care about whether this can be used as an lvalue in this
1926
     context.  */
1927
  while (TREE_CODE (expr) == NON_LVALUE_EXPR)
1928
    expr = TREE_OPERAND (expr, 0);
1929
 
1930
  /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
1931
     a constant, it will be more efficient to not make another SAVE_EXPR since
1932
     it will allow better simplification and GCSE will be able to merge the
1933
     computations if they actually occur.  */
1934
  inner = expr;
1935
  while (1)
1936
    {
1937
      if (UNARY_CLASS_P (inner))
1938
        inner = TREE_OPERAND (inner, 0);
1939
      else if (BINARY_CLASS_P (inner))
1940
        {
1941
          if (TREE_INVARIANT (TREE_OPERAND (inner, 1)))
1942
            inner = TREE_OPERAND (inner, 0);
1943
          else if (TREE_INVARIANT (TREE_OPERAND (inner, 0)))
1944
            inner = TREE_OPERAND (inner, 1);
1945
          else
1946
            break;
1947
        }
1948
      else
1949
        break;
1950
    }
1951
 
1952
  return inner;
1953
}
1954
 
1955
/* Return which tree structure is used by T.  */
1956
 
1957
enum tree_node_structure_enum
1958
tree_node_structure (tree t)
1959
{
1960
  enum tree_code code = TREE_CODE (t);
1961
 
1962
  switch (TREE_CODE_CLASS (code))
1963
    {
1964
    case tcc_declaration:
1965
      {
1966
        switch (code)
1967
          {
1968
          case FIELD_DECL:
1969
            return TS_FIELD_DECL;
1970
          case PARM_DECL:
1971
            return TS_PARM_DECL;
1972
          case VAR_DECL:
1973
            return TS_VAR_DECL;
1974
          case LABEL_DECL:
1975
            return TS_LABEL_DECL;
1976
          case RESULT_DECL:
1977
            return TS_RESULT_DECL;
1978
          case CONST_DECL:
1979
            return TS_CONST_DECL;
1980
          case TYPE_DECL:
1981
            return TS_TYPE_DECL;
1982
          case FUNCTION_DECL:
1983
            return TS_FUNCTION_DECL;
1984
          default:
1985
            return TS_DECL_NON_COMMON;
1986
          }
1987
      }
1988
    case tcc_type:
1989
      return TS_TYPE;
1990
    case tcc_reference:
1991
    case tcc_comparison:
1992
    case tcc_unary:
1993
    case tcc_binary:
1994
    case tcc_expression:
1995
    case tcc_statement:
1996
      return TS_EXP;
1997
    default:  /* tcc_constant and tcc_exceptional */
1998
      break;
1999
    }
2000
  switch (code)
2001
    {
2002
      /* tcc_constant cases.  */
2003
    case INTEGER_CST:           return TS_INT_CST;
2004
    case REAL_CST:              return TS_REAL_CST;
2005
    case COMPLEX_CST:           return TS_COMPLEX;
2006
    case VECTOR_CST:            return TS_VECTOR;
2007
    case STRING_CST:            return TS_STRING;
2008
      /* tcc_exceptional cases.  */
2009
    case ERROR_MARK:            return TS_COMMON;
2010
    case IDENTIFIER_NODE:       return TS_IDENTIFIER;
2011
    case TREE_LIST:             return TS_LIST;
2012
    case TREE_VEC:              return TS_VEC;
2013
    case PHI_NODE:              return TS_PHI_NODE;
2014
    case SSA_NAME:              return TS_SSA_NAME;
2015
    case PLACEHOLDER_EXPR:      return TS_COMMON;
2016
    case STATEMENT_LIST:        return TS_STATEMENT_LIST;
2017
    case BLOCK:                 return TS_BLOCK;
2018
    case CONSTRUCTOR:           return TS_CONSTRUCTOR;
2019
    case TREE_BINFO:            return TS_BINFO;
2020
    case VALUE_HANDLE:          return TS_VALUE_HANDLE;
2021
 
2022
    default:
2023
      gcc_unreachable ();
2024
    }
2025
}
2026
 
2027
/* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2028
   or offset that depends on a field within a record.  */
2029
 
2030
bool
2031
contains_placeholder_p (tree exp)
2032
{
2033
  enum tree_code code;
2034
 
2035
  if (!exp)
2036
    return 0;
2037
 
2038
  code = TREE_CODE (exp);
2039
  if (code == PLACEHOLDER_EXPR)
2040
    return 1;
2041
 
2042
  switch (TREE_CODE_CLASS (code))
2043
    {
2044
    case tcc_reference:
2045
      /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2046
         position computations since they will be converted into a
2047
         WITH_RECORD_EXPR involving the reference, which will assume
2048
         here will be valid.  */
2049
      return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2050
 
2051
    case tcc_exceptional:
2052
      if (code == TREE_LIST)
2053
        return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
2054
                || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
2055
      break;
2056
 
2057
    case tcc_unary:
2058
    case tcc_binary:
2059
    case tcc_comparison:
2060
    case tcc_expression:
2061
      switch (code)
2062
        {
2063
        case COMPOUND_EXPR:
2064
          /* Ignoring the first operand isn't quite right, but works best.  */
2065
          return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
2066
 
2067
        case COND_EXPR:
2068
          return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2069
                  || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
2070
                  || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
2071
 
2072
        case CALL_EXPR:
2073
          return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
2074
 
2075
        default:
2076
          break;
2077
        }
2078
 
2079
      switch (TREE_CODE_LENGTH (code))
2080
        {
2081
        case 1:
2082
          return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2083
        case 2:
2084
          return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2085
                  || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
2086
        default:
2087
          return 0;
2088
        }
2089
 
2090
    default:
2091
      return 0;
2092
    }
2093
  return 0;
2094
}
2095
 
2096
/* Return true if any part of the computation of TYPE involves a
2097
   PLACEHOLDER_EXPR.  This includes size, bounds, qualifiers
2098
   (for QUAL_UNION_TYPE) and field positions.  */
2099
 
2100
static bool
2101
type_contains_placeholder_1 (tree type)
2102
{
2103
  /* If the size contains a placeholder or the parent type (component type in
2104
     the case of arrays) type involves a placeholder, this type does.  */
2105
  if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
2106
      || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
2107
      || (TREE_TYPE (type) != 0
2108
          && type_contains_placeholder_p (TREE_TYPE (type))))
2109
    return true;
2110
 
2111
  /* Now do type-specific checks.  Note that the last part of the check above
2112
     greatly limits what we have to do below.  */
2113
  switch (TREE_CODE (type))
2114
    {
2115
    case VOID_TYPE:
2116
    case COMPLEX_TYPE:
2117
    case ENUMERAL_TYPE:
2118
    case BOOLEAN_TYPE:
2119
    case CHAR_TYPE:
2120
    case POINTER_TYPE:
2121
    case OFFSET_TYPE:
2122
    case REFERENCE_TYPE:
2123
    case METHOD_TYPE:
2124
    case FUNCTION_TYPE:
2125
    case VECTOR_TYPE:
2126
      return false;
2127
 
2128
    case INTEGER_TYPE:
2129
    case REAL_TYPE:
2130
      /* Here we just check the bounds.  */
2131
      return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
2132
              || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
2133
 
2134
    case ARRAY_TYPE:
2135
      /* We're already checked the component type (TREE_TYPE), so just check
2136
         the index type.  */
2137
      return type_contains_placeholder_p (TYPE_DOMAIN (type));
2138
 
2139
    case RECORD_TYPE:
2140
    case UNION_TYPE:
2141
    case QUAL_UNION_TYPE:
2142
      {
2143
        tree field;
2144
 
2145
        for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2146
          if (TREE_CODE (field) == FIELD_DECL
2147
              && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
2148
                  || (TREE_CODE (type) == QUAL_UNION_TYPE
2149
                      && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
2150
                  || type_contains_placeholder_p (TREE_TYPE (field))))
2151
            return true;
2152
 
2153
        return false;
2154
      }
2155
 
2156
    default:
2157
      gcc_unreachable ();
2158
    }
2159
}
2160
 
2161
bool
2162
type_contains_placeholder_p (tree type)
2163
{
2164
  bool result;
2165
 
2166
  /* If the contains_placeholder_bits field has been initialized,
2167
     then we know the answer.  */
2168
  if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
2169
    return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
2170
 
2171
  /* Indicate that we've seen this type node, and the answer is false.
2172
     This is what we want to return if we run into recursion via fields.  */
2173
  TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
2174
 
2175
  /* Compute the real value.  */
2176
  result = type_contains_placeholder_1 (type);
2177
 
2178
  /* Store the real value.  */
2179
  TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
2180
 
2181
  return result;
2182
}
2183
 
2184
/* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2185
   return a tree with all occurrences of references to F in a
2186
   PLACEHOLDER_EXPR replaced by R.   Note that we assume here that EXP
2187
   contains only arithmetic expressions or a CALL_EXPR with a
2188
   PLACEHOLDER_EXPR occurring only in its arglist.  */
2189
 
2190
tree
2191
substitute_in_expr (tree exp, tree f, tree r)
2192
{
2193
  enum tree_code code = TREE_CODE (exp);
2194
  tree op0, op1, op2, op3;
2195
  tree new;
2196
  tree inner;
2197
 
2198
  /* We handle TREE_LIST and COMPONENT_REF separately.  */
2199
  if (code == TREE_LIST)
2200
    {
2201
      op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
2202
      op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
2203
      if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2204
        return exp;
2205
 
2206
      return tree_cons (TREE_PURPOSE (exp), op1, op0);
2207
    }
2208
  else if (code == COMPONENT_REF)
2209
   {
2210
     /* If this expression is getting a value from a PLACEHOLDER_EXPR
2211
        and it is the right field, replace it with R.  */
2212
     for (inner = TREE_OPERAND (exp, 0);
2213
          REFERENCE_CLASS_P (inner);
2214
          inner = TREE_OPERAND (inner, 0))
2215
       ;
2216
     if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2217
         && TREE_OPERAND (exp, 1) == f)
2218
       return r;
2219
 
2220
     /* If this expression hasn't been completed let, leave it alone.  */
2221
     if (TREE_CODE (inner) == PLACEHOLDER_EXPR && TREE_TYPE (inner) == 0)
2222
       return exp;
2223
 
2224
     op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2225
     if (op0 == TREE_OPERAND (exp, 0))
2226
       return exp;
2227
 
2228
     new = fold_build3 (COMPONENT_REF, TREE_TYPE (exp),
2229
                        op0, TREE_OPERAND (exp, 1), NULL_TREE);
2230
   }
2231
  else
2232
    switch (TREE_CODE_CLASS (code))
2233
      {
2234
      case tcc_constant:
2235
      case tcc_declaration:
2236
        return exp;
2237
 
2238
      case tcc_exceptional:
2239
      case tcc_unary:
2240
      case tcc_binary:
2241
      case tcc_comparison:
2242
      case tcc_expression:
2243
      case tcc_reference:
2244
        switch (TREE_CODE_LENGTH (code))
2245
          {
2246
          case 0:
2247
            return exp;
2248
 
2249
          case 1:
2250
            op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2251
            if (op0 == TREE_OPERAND (exp, 0))
2252
              return exp;
2253
 
2254
            new = fold_build1 (code, TREE_TYPE (exp), op0);
2255
            break;
2256
 
2257
          case 2:
2258
            op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2259
            op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2260
 
2261
            if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2262
              return exp;
2263
 
2264
            new = fold_build2 (code, TREE_TYPE (exp), op0, op1);
2265
            break;
2266
 
2267
          case 3:
2268
            op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2269
            op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2270
            op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
2271
 
2272
            if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2273
                && op2 == TREE_OPERAND (exp, 2))
2274
              return exp;
2275
 
2276
            new = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
2277
            break;
2278
 
2279
          case 4:
2280
            op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2281
            op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2282
            op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
2283
            op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
2284
 
2285
            if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2286
                && op2 == TREE_OPERAND (exp, 2)
2287
                && op3 == TREE_OPERAND (exp, 3))
2288
              return exp;
2289
 
2290
            new = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2291
            break;
2292
 
2293
          default:
2294
            gcc_unreachable ();
2295
          }
2296
        break;
2297
 
2298
      default:
2299
        gcc_unreachable ();
2300
      }
2301
 
2302
  TREE_READONLY (new) = TREE_READONLY (exp);
2303
  return new;
2304
}
2305
 
2306
/* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
2307
   for it within OBJ, a tree that is an object or a chain of references.  */
2308
 
2309
tree
2310
substitute_placeholder_in_expr (tree exp, tree obj)
2311
{
2312
  enum tree_code code = TREE_CODE (exp);
2313
  tree op0, op1, op2, op3;
2314
 
2315
  /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
2316
     in the chain of OBJ.  */
2317
  if (code == PLACEHOLDER_EXPR)
2318
    {
2319
      tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
2320
      tree elt;
2321
 
2322
      for (elt = obj; elt != 0;
2323
           elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2324
                   || TREE_CODE (elt) == COND_EXPR)
2325
                  ? TREE_OPERAND (elt, 1)
2326
                  : (REFERENCE_CLASS_P (elt)
2327
                     || UNARY_CLASS_P (elt)
2328
                     || BINARY_CLASS_P (elt)
2329
                     || EXPRESSION_CLASS_P (elt))
2330
                  ? TREE_OPERAND (elt, 0) : 0))
2331
        if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
2332
          return elt;
2333
 
2334
      for (elt = obj; elt != 0;
2335
           elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2336
                   || TREE_CODE (elt) == COND_EXPR)
2337
                  ? TREE_OPERAND (elt, 1)
2338
                  : (REFERENCE_CLASS_P (elt)
2339
                     || UNARY_CLASS_P (elt)
2340
                     || BINARY_CLASS_P (elt)
2341
                     || EXPRESSION_CLASS_P (elt))
2342
                  ? TREE_OPERAND (elt, 0) : 0))
2343
        if (POINTER_TYPE_P (TREE_TYPE (elt))
2344
            && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
2345
                == need_type))
2346
          return fold_build1 (INDIRECT_REF, need_type, elt);
2347
 
2348
      /* If we didn't find it, return the original PLACEHOLDER_EXPR.  If it
2349
         survives until RTL generation, there will be an error.  */
2350
      return exp;
2351
    }
2352
 
2353
  /* TREE_LIST is special because we need to look at TREE_VALUE
2354
     and TREE_CHAIN, not TREE_OPERANDS.  */
2355
  else if (code == TREE_LIST)
2356
    {
2357
      op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
2358
      op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
2359
      if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2360
        return exp;
2361
 
2362
      return tree_cons (TREE_PURPOSE (exp), op1, op0);
2363
    }
2364
  else
2365
    switch (TREE_CODE_CLASS (code))
2366
      {
2367
      case tcc_constant:
2368
      case tcc_declaration:
2369
        return exp;
2370
 
2371
      case tcc_exceptional:
2372
      case tcc_unary:
2373
      case tcc_binary:
2374
      case tcc_comparison:
2375
      case tcc_expression:
2376
      case tcc_reference:
2377
      case tcc_statement:
2378
        switch (TREE_CODE_LENGTH (code))
2379
          {
2380
          case 0:
2381
            return exp;
2382
 
2383
          case 1:
2384
            op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2385
            if (op0 == TREE_OPERAND (exp, 0))
2386
              return exp;
2387
            else
2388
              return fold_build1 (code, TREE_TYPE (exp), op0);
2389
 
2390
          case 2:
2391
            op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2392
            op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2393
 
2394
            if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2395
              return exp;
2396
            else
2397
              return fold_build2 (code, TREE_TYPE (exp), op0, op1);
2398
 
2399
          case 3:
2400
            op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2401
            op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2402
            op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2403
 
2404
            if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2405
                && op2 == TREE_OPERAND (exp, 2))
2406
              return exp;
2407
            else
2408
              return fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
2409
 
2410
          case 4:
2411
            op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2412
            op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2413
            op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2414
            op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
2415
 
2416
            if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2417
                && op2 == TREE_OPERAND (exp, 2)
2418
                && op3 == TREE_OPERAND (exp, 3))
2419
              return exp;
2420
            else
2421
              return fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2422
 
2423
          default:
2424
            gcc_unreachable ();
2425
          }
2426
        break;
2427
 
2428
      default:
2429
        gcc_unreachable ();
2430
      }
2431
}
2432
 
2433
/* Stabilize a reference so that we can use it any number of times
2434
   without causing its operands to be evaluated more than once.
2435
   Returns the stabilized reference.  This works by means of save_expr,
2436
   so see the caveats in the comments about save_expr.
2437
 
2438
   Also allows conversion expressions whose operands are references.
2439
   Any other kind of expression is returned unchanged.  */
2440
 
2441
tree
2442
stabilize_reference (tree ref)
2443
{
2444
  tree result;
2445
  enum tree_code code = TREE_CODE (ref);
2446
 
2447
  switch (code)
2448
    {
2449
    case VAR_DECL:
2450
    case PARM_DECL:
2451
    case RESULT_DECL:
2452
      /* No action is needed in this case.  */
2453
      return ref;
2454
 
2455
    case NOP_EXPR:
2456
    case CONVERT_EXPR:
2457
    case FLOAT_EXPR:
2458
    case FIX_TRUNC_EXPR:
2459
    case FIX_FLOOR_EXPR:
2460
    case FIX_ROUND_EXPR:
2461
    case FIX_CEIL_EXPR:
2462
      result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2463
      break;
2464
 
2465
    case INDIRECT_REF:
2466
      result = build_nt (INDIRECT_REF,
2467
                         stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2468
      break;
2469
 
2470
    case COMPONENT_REF:
2471
      result = build_nt (COMPONENT_REF,
2472
                         stabilize_reference (TREE_OPERAND (ref, 0)),
2473
                         TREE_OPERAND (ref, 1), NULL_TREE);
2474
      break;
2475
 
2476
    case BIT_FIELD_REF:
2477
      result = build_nt (BIT_FIELD_REF,
2478
                         stabilize_reference (TREE_OPERAND (ref, 0)),
2479
                         stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2480
                         stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2481
      break;
2482
 
2483
    case ARRAY_REF:
2484
      result = build_nt (ARRAY_REF,
2485
                         stabilize_reference (TREE_OPERAND (ref, 0)),
2486
                         stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2487
                         TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2488
      break;
2489
 
2490
    case ARRAY_RANGE_REF:
2491
      result = build_nt (ARRAY_RANGE_REF,
2492
                         stabilize_reference (TREE_OPERAND (ref, 0)),
2493
                         stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2494
                         TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2495
      break;
2496
 
2497
    case COMPOUND_EXPR:
2498
      /* We cannot wrap the first expression in a SAVE_EXPR, as then
2499
         it wouldn't be ignored.  This matters when dealing with
2500
         volatiles.  */
2501
      return stabilize_reference_1 (ref);
2502
 
2503
      /* If arg isn't a kind of lvalue we recognize, make no change.
2504
         Caller should recognize the error for an invalid lvalue.  */
2505
    default:
2506
      return ref;
2507
 
2508
    case ERROR_MARK:
2509
      return error_mark_node;
2510
    }
2511
 
2512
  TREE_TYPE (result) = TREE_TYPE (ref);
2513
  TREE_READONLY (result) = TREE_READONLY (ref);
2514
  TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2515
  TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2516
 
2517
  return result;
2518
}
2519
 
2520
/* Subroutine of stabilize_reference; this is called for subtrees of
2521
   references.  Any expression with side-effects must be put in a SAVE_EXPR
2522
   to ensure that it is only evaluated once.
2523
 
2524
   We don't put SAVE_EXPR nodes around everything, because assigning very
2525
   simple expressions to temporaries causes us to miss good opportunities
2526
   for optimizations.  Among other things, the opportunity to fold in the
2527
   addition of a constant into an addressing mode often gets lost, e.g.
2528
   "y[i+1] += x;".  In general, we take the approach that we should not make
2529
   an assignment unless we are forced into it - i.e., that any non-side effect
2530
   operator should be allowed, and that cse should take care of coalescing
2531
   multiple utterances of the same expression should that prove fruitful.  */
2532
 
2533
tree
2534
stabilize_reference_1 (tree e)
2535
{
2536
  tree result;
2537
  enum tree_code code = TREE_CODE (e);
2538
 
2539
  /* We cannot ignore const expressions because it might be a reference
2540
     to a const array but whose index contains side-effects.  But we can
2541
     ignore things that are actual constant or that already have been
2542
     handled by this function.  */
2543
 
2544
  if (TREE_INVARIANT (e))
2545
    return e;
2546
 
2547
  switch (TREE_CODE_CLASS (code))
2548
    {
2549
    case tcc_exceptional:
2550
    case tcc_type:
2551
    case tcc_declaration:
2552
    case tcc_comparison:
2553
    case tcc_statement:
2554
    case tcc_expression:
2555
    case tcc_reference:
2556
      /* If the expression has side-effects, then encase it in a SAVE_EXPR
2557
         so that it will only be evaluated once.  */
2558
      /* The reference (r) and comparison (<) classes could be handled as
2559
         below, but it is generally faster to only evaluate them once.  */
2560
      if (TREE_SIDE_EFFECTS (e))
2561
        return save_expr (e);
2562
      return e;
2563
 
2564
    case tcc_constant:
2565
      /* Constants need no processing.  In fact, we should never reach
2566
         here.  */
2567
      return e;
2568
 
2569
    case tcc_binary:
2570
      /* Division is slow and tends to be compiled with jumps,
2571
         especially the division by powers of 2 that is often
2572
         found inside of an array reference.  So do it just once.  */
2573
      if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2574
          || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2575
          || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2576
          || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2577
        return save_expr (e);
2578
      /* Recursively stabilize each operand.  */
2579
      result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2580
                         stabilize_reference_1 (TREE_OPERAND (e, 1)));
2581
      break;
2582
 
2583
    case tcc_unary:
2584
      /* Recursively stabilize each operand.  */
2585
      result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2586
      break;
2587
 
2588
    default:
2589
      gcc_unreachable ();
2590
    }
2591
 
2592
  TREE_TYPE (result) = TREE_TYPE (e);
2593
  TREE_READONLY (result) = TREE_READONLY (e);
2594
  TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2595
  TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2596
  TREE_INVARIANT (result) = 1;
2597
 
2598
  return result;
2599
}
2600
 
2601
/* Low-level constructors for expressions.  */
2602
 
2603
/* A helper function for build1 and constant folders.  Set TREE_CONSTANT,
2604
   TREE_INVARIANT, and TREE_SIDE_EFFECTS for an ADDR_EXPR.  */
2605
 
2606
void
2607
recompute_tree_invarant_for_addr_expr (tree t)
2608
{
2609
  tree node;
2610
  bool tc = true, ti = true, se = false;
2611
 
2612
  /* We started out assuming this address is both invariant and constant, but
2613
     does not have side effects.  Now go down any handled components and see if
2614
     any of them involve offsets that are either non-constant or non-invariant.
2615
     Also check for side-effects.
2616
 
2617
     ??? Note that this code makes no attempt to deal with the case where
2618
     taking the address of something causes a copy due to misalignment.  */
2619
 
2620
#define UPDATE_TITCSE(NODE)  \
2621
do { tree _node = (NODE); \
2622
     if (_node && !TREE_INVARIANT (_node)) ti = false; \
2623
     if (_node && !TREE_CONSTANT (_node)) tc = false; \
2624
     if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
2625
 
2626
  for (node = TREE_OPERAND (t, 0); handled_component_p (node);
2627
       node = TREE_OPERAND (node, 0))
2628
    {
2629
      /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
2630
         array reference (probably made temporarily by the G++ front end),
2631
         so ignore all the operands.  */
2632
      if ((TREE_CODE (node) == ARRAY_REF
2633
           || TREE_CODE (node) == ARRAY_RANGE_REF)
2634
          && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
2635
        {
2636
          UPDATE_TITCSE (TREE_OPERAND (node, 1));
2637
          if (TREE_OPERAND (node, 2))
2638
            UPDATE_TITCSE (TREE_OPERAND (node, 2));
2639
          if (TREE_OPERAND (node, 3))
2640
            UPDATE_TITCSE (TREE_OPERAND (node, 3));
2641
        }
2642
      /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
2643
         FIELD_DECL, apparently.  The G++ front end can put something else
2644
         there, at least temporarily.  */
2645
      else if (TREE_CODE (node) == COMPONENT_REF
2646
               && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
2647
        {
2648
          if (TREE_OPERAND (node, 2))
2649
            UPDATE_TITCSE (TREE_OPERAND (node, 2));
2650
        }
2651
      else if (TREE_CODE (node) == BIT_FIELD_REF)
2652
        UPDATE_TITCSE (TREE_OPERAND (node, 2));
2653
    }
2654
 
2655
  node = lang_hooks.expr_to_decl (node, &tc, &ti, &se);
2656
 
2657
  /* Now see what's inside.  If it's an INDIRECT_REF, copy our properties from
2658
     the address, since &(*a)->b is a form of addition.  If it's a decl, it's
2659
     invariant and constant if the decl is static.  It's also invariant if it's
2660
     a decl in the current function.  Taking the address of a volatile variable
2661
     is not volatile.  If it's a constant, the address is both invariant and
2662
     constant.  Otherwise it's neither.  */
2663
  if (TREE_CODE (node) == INDIRECT_REF)
2664
    UPDATE_TITCSE (TREE_OPERAND (node, 0));
2665
  else if (DECL_P (node))
2666
    {
2667
      if (staticp (node))
2668
        ;
2669
      else if (decl_function_context (node) == current_function_decl
2670
               /* Addresses of thread-local variables are invariant.  */
2671
               || (TREE_CODE (node) == VAR_DECL
2672
                   && DECL_THREAD_LOCAL_P (node)))
2673
        tc = false;
2674
      else
2675
        ti = tc = false;
2676
    }
2677
  else if (CONSTANT_CLASS_P (node))
2678
    ;
2679
  else
2680
    {
2681
      ti = tc = false;
2682
      se |= TREE_SIDE_EFFECTS (node);
2683
    }
2684
 
2685
  TREE_CONSTANT (t) = tc;
2686
  TREE_INVARIANT (t) = ti;
2687
  TREE_SIDE_EFFECTS (t) = se;
2688
#undef UPDATE_TITCSE
2689
}
2690
 
2691
/* Build an expression of code CODE, data type TYPE, and operands as
2692
   specified.  Expressions and reference nodes can be created this way.
2693
   Constants, decls, types and misc nodes cannot be.
2694
 
2695
   We define 5 non-variadic functions, from 0 to 4 arguments.  This is
2696
   enough for all extant tree codes.  These functions can be called
2697
   directly (preferably!), but can also be obtained via GCC preprocessor
2698
   magic within the build macro.  */
2699
 
2700
tree
2701
build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
2702
{
2703
  tree t;
2704
 
2705
  gcc_assert (TREE_CODE_LENGTH (code) == 0);
2706
 
2707
  t = make_node_stat (code PASS_MEM_STAT);
2708
  TREE_TYPE (t) = tt;
2709
 
2710
  return t;
2711
}
2712
 
2713
tree
2714
build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
2715
{
2716
  int length = sizeof (struct tree_exp);
2717
#ifdef GATHER_STATISTICS
2718
  tree_node_kind kind;
2719
#endif
2720
  tree t;
2721
 
2722
#ifdef GATHER_STATISTICS
2723
  switch (TREE_CODE_CLASS (code))
2724
    {
2725
    case tcc_statement:  /* an expression with side effects */
2726
      kind = s_kind;
2727
      break;
2728
    case tcc_reference:  /* a reference */
2729
      kind = r_kind;
2730
      break;
2731
    default:
2732
      kind = e_kind;
2733
      break;
2734
    }
2735
 
2736
  tree_node_counts[(int) kind]++;
2737
  tree_node_sizes[(int) kind] += length;
2738
#endif
2739
 
2740
  gcc_assert (TREE_CODE_LENGTH (code) == 1);
2741
 
2742
  t = ggc_alloc_zone_pass_stat (length, &tree_zone);
2743
 
2744
  memset (t, 0, sizeof (struct tree_common));
2745
 
2746
  TREE_SET_CODE (t, code);
2747
 
2748
  TREE_TYPE (t) = type;
2749
#ifdef USE_MAPPED_LOCATION
2750
  SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
2751
#else
2752
  SET_EXPR_LOCUS (t, NULL);
2753
#endif
2754
  TREE_COMPLEXITY (t) = 0;
2755
  TREE_OPERAND (t, 0) = node;
2756
  TREE_BLOCK (t) = NULL_TREE;
2757
  if (node && !TYPE_P (node))
2758
    {
2759
      TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2760
      TREE_READONLY (t) = TREE_READONLY (node);
2761
    }
2762
 
2763
  if (TREE_CODE_CLASS (code) == tcc_statement)
2764
    TREE_SIDE_EFFECTS (t) = 1;
2765
  else switch (code)
2766
    {
2767
    case VA_ARG_EXPR:
2768
      /* All of these have side-effects, no matter what their
2769
         operands are.  */
2770
      TREE_SIDE_EFFECTS (t) = 1;
2771
      TREE_READONLY (t) = 0;
2772
      break;
2773
 
2774
    case MISALIGNED_INDIRECT_REF:
2775
    case ALIGN_INDIRECT_REF:
2776
    case INDIRECT_REF:
2777
      /* Whether a dereference is readonly has nothing to do with whether
2778
         its operand is readonly.  */
2779
      TREE_READONLY (t) = 0;
2780
      break;
2781
 
2782
    case ADDR_EXPR:
2783
      if (node)
2784
        recompute_tree_invarant_for_addr_expr (t);
2785
      break;
2786
 
2787
    default:
2788
      if (TREE_CODE_CLASS (code) == tcc_unary
2789
          && node && !TYPE_P (node)
2790
          && TREE_CONSTANT (node))
2791
        TREE_CONSTANT (t) = 1;
2792
      if (TREE_CODE_CLASS (code) == tcc_unary
2793
          && node && TREE_INVARIANT (node))
2794
        TREE_INVARIANT (t) = 1;
2795
      if (TREE_CODE_CLASS (code) == tcc_reference
2796
          && node && TREE_THIS_VOLATILE (node))
2797
        TREE_THIS_VOLATILE (t) = 1;
2798
      break;
2799
    }
2800
 
2801
  return t;
2802
}
2803
 
2804
#define PROCESS_ARG(N)                  \
2805
  do {                                  \
2806
    TREE_OPERAND (t, N) = arg##N;       \
2807
    if (arg##N &&!TYPE_P (arg##N))      \
2808
      {                                 \
2809
        if (TREE_SIDE_EFFECTS (arg##N)) \
2810
          side_effects = 1;             \
2811
        if (!TREE_READONLY (arg##N))    \
2812
          read_only = 0;         \
2813
        if (!TREE_CONSTANT (arg##N))    \
2814
          constant = 0;                  \
2815
        if (!TREE_INVARIANT (arg##N))   \
2816
          invariant = 0;         \
2817
      }                                 \
2818
  } while (0)
2819
 
2820
tree
2821
build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
2822
{
2823
  bool constant, read_only, side_effects, invariant;
2824
  tree t;
2825
 
2826
  gcc_assert (TREE_CODE_LENGTH (code) == 2);
2827
 
2828
  t = make_node_stat (code PASS_MEM_STAT);
2829
  TREE_TYPE (t) = tt;
2830
 
2831
  /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
2832
     result based on those same flags for the arguments.  But if the
2833
     arguments aren't really even `tree' expressions, we shouldn't be trying
2834
     to do this.  */
2835
 
2836
  /* Expressions without side effects may be constant if their
2837
     arguments are as well.  */
2838
  constant = (TREE_CODE_CLASS (code) == tcc_comparison
2839
              || TREE_CODE_CLASS (code) == tcc_binary);
2840
  read_only = 1;
2841
  side_effects = TREE_SIDE_EFFECTS (t);
2842
  invariant = constant;
2843
 
2844
  PROCESS_ARG(0);
2845
  PROCESS_ARG(1);
2846
 
2847
  TREE_READONLY (t) = read_only;
2848
  TREE_CONSTANT (t) = constant;
2849
  TREE_INVARIANT (t) = invariant;
2850
  TREE_SIDE_EFFECTS (t) = side_effects;
2851
  TREE_THIS_VOLATILE (t)
2852
    = (TREE_CODE_CLASS (code) == tcc_reference
2853
       && arg0 && TREE_THIS_VOLATILE (arg0));
2854
 
2855
  return t;
2856
}
2857
 
2858
tree
2859
build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2860
             tree arg2 MEM_STAT_DECL)
2861
{
2862
  bool constant, read_only, side_effects, invariant;
2863
  tree t;
2864
 
2865
  gcc_assert (TREE_CODE_LENGTH (code) == 3);
2866
 
2867
  t = make_node_stat (code PASS_MEM_STAT);
2868
  TREE_TYPE (t) = tt;
2869
 
2870
  side_effects = TREE_SIDE_EFFECTS (t);
2871
 
2872
  PROCESS_ARG(0);
2873
  PROCESS_ARG(1);
2874
  PROCESS_ARG(2);
2875
 
2876
  if (code == CALL_EXPR && !side_effects)
2877
    {
2878
      tree node;
2879
      int i;
2880
 
2881
      /* Calls have side-effects, except those to const or
2882
         pure functions.  */
2883
      i = call_expr_flags (t);
2884
      if (!(i & (ECF_CONST | ECF_PURE)))
2885
        side_effects = 1;
2886
 
2887
      /* And even those have side-effects if their arguments do.  */
2888
      else for (node = arg1; node; node = TREE_CHAIN (node))
2889
        if (TREE_SIDE_EFFECTS (TREE_VALUE (node)))
2890
          {
2891
            side_effects = 1;
2892
            break;
2893
          }
2894
    }
2895
 
2896
  TREE_SIDE_EFFECTS (t) = side_effects;
2897
  TREE_THIS_VOLATILE (t)
2898
    = (TREE_CODE_CLASS (code) == tcc_reference
2899
       && arg0 && TREE_THIS_VOLATILE (arg0));
2900
 
2901
  return t;
2902
}
2903
 
2904
tree
2905
build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2906
             tree arg2, tree arg3 MEM_STAT_DECL)
2907
{
2908
  bool constant, read_only, side_effects, invariant;
2909
  tree t;
2910
 
2911
  gcc_assert (TREE_CODE_LENGTH (code) == 4);
2912
 
2913
  t = make_node_stat (code PASS_MEM_STAT);
2914
  TREE_TYPE (t) = tt;
2915
 
2916
  side_effects = TREE_SIDE_EFFECTS (t);
2917
 
2918
  PROCESS_ARG(0);
2919
  PROCESS_ARG(1);
2920
  PROCESS_ARG(2);
2921
  PROCESS_ARG(3);
2922
 
2923
  TREE_SIDE_EFFECTS (t) = side_effects;
2924
  TREE_THIS_VOLATILE (t)
2925
    = (TREE_CODE_CLASS (code) == tcc_reference
2926
       && arg0 && TREE_THIS_VOLATILE (arg0));
2927
 
2928
  return t;
2929
}
2930
 
2931
tree
2932
build7_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2933
             tree arg2, tree arg3, tree arg4, tree arg5,
2934
             tree arg6 MEM_STAT_DECL)
2935
{
2936
  bool constant, read_only, side_effects, invariant;
2937
  tree t;
2938
 
2939
  gcc_assert (code == TARGET_MEM_REF);
2940
 
2941
  t = make_node_stat (code PASS_MEM_STAT);
2942
  TREE_TYPE (t) = tt;
2943
 
2944
  side_effects = TREE_SIDE_EFFECTS (t);
2945
 
2946
  PROCESS_ARG(0);
2947
  PROCESS_ARG(1);
2948
  PROCESS_ARG(2);
2949
  PROCESS_ARG(3);
2950
  PROCESS_ARG(4);
2951
  PROCESS_ARG(5);
2952
  PROCESS_ARG(6);
2953
 
2954
  TREE_SIDE_EFFECTS (t) = side_effects;
2955
  TREE_THIS_VOLATILE (t) = 0;
2956
 
2957
  return t;
2958
}
2959
 
2960
/* Backup definition for non-gcc build compilers.  */
2961
 
2962
tree
2963
(build) (enum tree_code code, tree tt, ...)
2964
{
2965
  tree t, arg0, arg1, arg2, arg3, arg4, arg5, arg6;
2966
  int length = TREE_CODE_LENGTH (code);
2967
  va_list p;
2968
 
2969
  va_start (p, tt);
2970
  switch (length)
2971
    {
2972
    case 0:
2973
      t = build0 (code, tt);
2974
      break;
2975
    case 1:
2976
      arg0 = va_arg (p, tree);
2977
      t = build1 (code, tt, arg0);
2978
      break;
2979
    case 2:
2980
      arg0 = va_arg (p, tree);
2981
      arg1 = va_arg (p, tree);
2982
      t = build2 (code, tt, arg0, arg1);
2983
      break;
2984
    case 3:
2985
      arg0 = va_arg (p, tree);
2986
      arg1 = va_arg (p, tree);
2987
      arg2 = va_arg (p, tree);
2988
      t = build3 (code, tt, arg0, arg1, arg2);
2989
      break;
2990
    case 4:
2991
      arg0 = va_arg (p, tree);
2992
      arg1 = va_arg (p, tree);
2993
      arg2 = va_arg (p, tree);
2994
      arg3 = va_arg (p, tree);
2995
      t = build4 (code, tt, arg0, arg1, arg2, arg3);
2996
      break;
2997
    case 7:
2998
      arg0 = va_arg (p, tree);
2999
      arg1 = va_arg (p, tree);
3000
      arg2 = va_arg (p, tree);
3001
      arg3 = va_arg (p, tree);
3002
      arg4 = va_arg (p, tree);
3003
      arg5 = va_arg (p, tree);
3004
      arg6 = va_arg (p, tree);
3005
      t = build7 (code, tt, arg0, arg1, arg2, arg3, arg4, arg5, arg6);
3006
      break;
3007
    default:
3008
      gcc_unreachable ();
3009
    }
3010
  va_end (p);
3011
 
3012
  return t;
3013
}
3014
 
3015
/* Similar except don't specify the TREE_TYPE
3016
   and leave the TREE_SIDE_EFFECTS as 0.
3017
   It is permissible for arguments to be null,
3018
   or even garbage if their values do not matter.  */
3019
 
3020
tree
3021
build_nt (enum tree_code code, ...)
3022
{
3023
  tree t;
3024
  int length;
3025
  int i;
3026
  va_list p;
3027
 
3028
  va_start (p, code);
3029
 
3030
  t = make_node (code);
3031
  length = TREE_CODE_LENGTH (code);
3032
 
3033
  for (i = 0; i < length; i++)
3034
    TREE_OPERAND (t, i) = va_arg (p, tree);
3035
 
3036
  va_end (p);
3037
  return t;
3038
}
3039
 
3040
/* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3041
   We do NOT enter this node in any sort of symbol table.
3042
 
3043
   layout_decl is used to set up the decl's storage layout.
3044
   Other slots are initialized to 0 or null pointers.  */
3045
 
3046
tree
3047
build_decl_stat (enum tree_code code, tree name, tree type MEM_STAT_DECL)
3048
{
3049
  tree t;
3050
 
3051
  t = make_node_stat (code PASS_MEM_STAT);
3052
 
3053
/*  if (type == error_mark_node)
3054
    type = integer_type_node; */
3055
/* That is not done, deliberately, so that having error_mark_node
3056
   as the type can suppress useless errors in the use of this variable.  */
3057
 
3058
  DECL_NAME (t) = name;
3059
  TREE_TYPE (t) = type;
3060
 
3061
  if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
3062
    layout_decl (t, 0);
3063
  else if (code == FUNCTION_DECL)
3064
    DECL_MODE (t) = FUNCTION_MODE;
3065
 
3066
  if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
3067
    {
3068
      /* Set default visibility to whatever the user supplied with
3069
         visibility_specified depending on #pragma GCC visibility.  */
3070
      DECL_VISIBILITY (t) = default_visibility;
3071
      DECL_VISIBILITY_SPECIFIED (t) = visibility_options.inpragma;
3072
    }
3073
 
3074
  return t;
3075
}
3076
 
3077
/* Builds and returns function declaration with NAME and TYPE.  */
3078
 
3079
tree
3080
build_fn_decl (const char *name, tree type)
3081
{
3082
  tree id = get_identifier (name);
3083
  tree decl = build_decl (FUNCTION_DECL, id, type);
3084
 
3085
  DECL_EXTERNAL (decl) = 1;
3086
  TREE_PUBLIC (decl) = 1;
3087
  DECL_ARTIFICIAL (decl) = 1;
3088
  TREE_NOTHROW (decl) = 1;
3089
 
3090
  return decl;
3091
}
3092
 
3093
 
3094
/* BLOCK nodes are used to represent the structure of binding contours
3095
   and declarations, once those contours have been exited and their contents
3096
   compiled.  This information is used for outputting debugging info.  */
3097
 
3098
tree
3099
build_block (tree vars, tree subblocks, tree supercontext, tree chain)
3100
{
3101
  tree block = make_node (BLOCK);
3102
 
3103
  BLOCK_VARS (block) = vars;
3104
  BLOCK_SUBBLOCKS (block) = subblocks;
3105
  BLOCK_SUPERCONTEXT (block) = supercontext;
3106
  BLOCK_CHAIN (block) = chain;
3107
  return block;
3108
}
3109
 
3110
#if 1 /* ! defined(USE_MAPPED_LOCATION) */
3111
/* ??? gengtype doesn't handle conditionals */
3112
static GTY(()) location_t *last_annotated_node;
3113
#endif
3114
 
3115
#ifdef USE_MAPPED_LOCATION
3116
 
3117
expanded_location
3118
expand_location (source_location loc)
3119
{
3120
  expanded_location xloc;
3121
  if (loc == 0) { xloc.file = NULL; xloc.line = 0;  xloc.column = 0; }
3122
  else
3123
    {
3124
      const struct line_map *map = linemap_lookup (&line_table, loc);
3125
      xloc.file = map->to_file;
3126
      xloc.line = SOURCE_LINE (map, loc);
3127
      xloc.column = SOURCE_COLUMN (map, loc);
3128
    };
3129
  return xloc;
3130
}
3131
 
3132
#else
3133
 
3134
/* Record the exact location where an expression or an identifier were
3135
   encountered.  */
3136
 
3137
void
3138
annotate_with_file_line (tree node, const char *file, int line)
3139
{
3140
  /* Roughly one percent of the calls to this function are to annotate
3141
     a node with the same information already attached to that node!
3142
     Just return instead of wasting memory.  */
3143
  if (EXPR_LOCUS (node)
3144
      && EXPR_LINENO (node) == line
3145
      && (EXPR_FILENAME (node) == file
3146
          || !strcmp (EXPR_FILENAME (node), file)))
3147
    {
3148
      last_annotated_node = EXPR_LOCUS (node);
3149
      return;
3150
    }
3151
 
3152
  /* In heavily macroized code (such as GCC itself) this single
3153
     entry cache can reduce the number of allocations by more
3154
     than half.  */
3155
  if (last_annotated_node
3156
      && last_annotated_node->line == line
3157
      && (last_annotated_node->file == file
3158
          || !strcmp (last_annotated_node->file, file)))
3159
    {
3160
      SET_EXPR_LOCUS (node, last_annotated_node);
3161
      return;
3162
    }
3163
 
3164
  SET_EXPR_LOCUS (node, ggc_alloc (sizeof (location_t)));
3165
  EXPR_LINENO (node) = line;
3166
  EXPR_FILENAME (node) = file;
3167
  last_annotated_node = EXPR_LOCUS (node);
3168
}
3169
 
3170
void
3171
annotate_with_locus (tree node, location_t locus)
3172
{
3173
  annotate_with_file_line (node, locus.file, locus.line);
3174
}
3175
#endif
3176
 
3177
/* Return a declaration like DDECL except that its DECL_ATTRIBUTES
3178
   is ATTRIBUTE.  */
3179
 
3180
tree
3181
build_decl_attribute_variant (tree ddecl, tree attribute)
3182
{
3183
  DECL_ATTRIBUTES (ddecl) = attribute;
3184
  return ddecl;
3185
}
3186
 
3187
/* Borrowed from hashtab.c iterative_hash implementation.  */
3188
#define mix(a,b,c) \
3189
{ \
3190
  a -= b; a -= c; a ^= (c>>13); \
3191
  b -= c; b -= a; b ^= (a<< 8); \
3192
  c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
3193
  a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
3194
  b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
3195
  c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
3196
  a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
3197
  b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
3198
  c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
3199
}
3200
 
3201
 
3202
/* Produce good hash value combining VAL and VAL2.  */
3203
static inline hashval_t
3204
iterative_hash_hashval_t (hashval_t val, hashval_t val2)
3205
{
3206
  /* the golden ratio; an arbitrary value.  */
3207
  hashval_t a = 0x9e3779b9;
3208
 
3209
  mix (a, val, val2);
3210
  return val2;
3211
}
3212
 
3213
/* Produce good hash value combining PTR and VAL2.  */
3214
static inline hashval_t
3215
iterative_hash_pointer (void *ptr, hashval_t val2)
3216
{
3217
  if (sizeof (ptr) == sizeof (hashval_t))
3218
    return iterative_hash_hashval_t ((size_t) ptr, val2);
3219
  else
3220
    {
3221
      hashval_t a = (hashval_t) (size_t) ptr;
3222
      /* Avoid warnings about shifting of more than the width of the type on
3223
         hosts that won't execute this path.  */
3224
      int zero = 0;
3225
      hashval_t b = (hashval_t) ((size_t) ptr >> (sizeof (hashval_t) * 8 + zero));
3226
      mix (a, b, val2);
3227
      return val2;
3228
    }
3229
}
3230
 
3231
/* Produce good hash value combining VAL and VAL2.  */
3232
static inline hashval_t
3233
iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
3234
{
3235
  if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
3236
    return iterative_hash_hashval_t (val, val2);
3237
  else
3238
    {
3239
      hashval_t a = (hashval_t) val;
3240
      /* Avoid warnings about shifting of more than the width of the type on
3241
         hosts that won't execute this path.  */
3242
      int zero = 0;
3243
      hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
3244
      mix (a, b, val2);
3245
      if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
3246
        {
3247
          hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
3248
          hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
3249
          mix (a, b, val2);
3250
        }
3251
      return val2;
3252
    }
3253
}
3254
 
3255
/* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3256
   is ATTRIBUTE.
3257
 
3258
   Record such modified types already made so we don't make duplicates.  */
3259
 
3260
tree
3261
build_type_attribute_variant (tree ttype, tree attribute)
3262
{
3263
  if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3264
    {
3265
      hashval_t hashcode = 0;
3266
      tree ntype;
3267
      enum tree_code code = TREE_CODE (ttype);
3268
 
3269
      ntype = copy_node (ttype);
3270
 
3271
      TYPE_POINTER_TO (ntype) = 0;
3272
      TYPE_REFERENCE_TO (ntype) = 0;
3273
      TYPE_ATTRIBUTES (ntype) = attribute;
3274
 
3275
      /* Create a new main variant of TYPE.  */
3276
      TYPE_MAIN_VARIANT (ntype) = ntype;
3277
      TYPE_NEXT_VARIANT (ntype) = 0;
3278
      set_type_quals (ntype, TYPE_UNQUALIFIED);
3279
 
3280
      hashcode = iterative_hash_object (code, hashcode);
3281
      if (TREE_TYPE (ntype))
3282
        hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
3283
                                          hashcode);
3284
      hashcode = attribute_hash_list (attribute, hashcode);
3285
 
3286
      switch (TREE_CODE (ntype))
3287
        {
3288
        case FUNCTION_TYPE:
3289
          hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
3290
          break;
3291
        case ARRAY_TYPE:
3292
          hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
3293
                                            hashcode);
3294
          break;
3295
        case INTEGER_TYPE:
3296
          hashcode = iterative_hash_object
3297
            (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
3298
          hashcode = iterative_hash_object
3299
            (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
3300
          break;
3301
        case REAL_TYPE:
3302
          {
3303
            unsigned int precision = TYPE_PRECISION (ntype);
3304
            hashcode = iterative_hash_object (precision, hashcode);
3305
          }
3306
          break;
3307
        default:
3308
          break;
3309
        }
3310
 
3311
      ntype = type_hash_canon (hashcode, ntype);
3312
      ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
3313
    }
3314
 
3315
  return ttype;
3316
}
3317
 
3318
 
3319
/* Return nonzero if IDENT is a valid name for attribute ATTR,
3320
   or zero if not.
3321
 
3322
   We try both `text' and `__text__', ATTR may be either one.  */
3323
/* ??? It might be a reasonable simplification to require ATTR to be only
3324
   `text'.  One might then also require attribute lists to be stored in
3325
   their canonicalized form.  */
3326
 
3327
static int
3328
is_attribute_with_length_p (const char *attr, int attr_len, tree ident)
3329
{
3330
  int ident_len;
3331
  const char *p;
3332
 
3333
  if (TREE_CODE (ident) != IDENTIFIER_NODE)
3334
    return 0;
3335
 
3336
  p = IDENTIFIER_POINTER (ident);
3337
  ident_len = IDENTIFIER_LENGTH (ident);
3338
 
3339
  if (ident_len == attr_len
3340
      && strcmp (attr, p) == 0)
3341
    return 1;
3342
 
3343
  /* If ATTR is `__text__', IDENT must be `text'; and vice versa.  */
3344
  if (attr[0] == '_')
3345
    {
3346
      gcc_assert (attr[1] == '_');
3347
      gcc_assert (attr[attr_len - 2] == '_');
3348
      gcc_assert (attr[attr_len - 1] == '_');
3349
      gcc_assert (attr[1] == '_');
3350
      if (ident_len == attr_len - 4
3351
          && strncmp (attr + 2, p, attr_len - 4) == 0)
3352
        return 1;
3353
    }
3354
  else
3355
    {
3356
      if (ident_len == attr_len + 4
3357
          && p[0] == '_' && p[1] == '_'
3358
          && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3359
          && strncmp (attr, p + 2, attr_len) == 0)
3360
        return 1;
3361
    }
3362
 
3363
  return 0;
3364
}
3365
 
3366
/* Return nonzero if IDENT is a valid name for attribute ATTR,
3367
   or zero if not.
3368
 
3369
   We try both `text' and `__text__', ATTR may be either one.  */
3370
 
3371
int
3372
is_attribute_p (const char *attr, tree ident)
3373
{
3374
  return is_attribute_with_length_p (attr, strlen (attr), ident);
3375
}
3376
 
3377
/* Given an attribute name and a list of attributes, return a pointer to the
3378
   attribute's list element if the attribute is part of the list, or NULL_TREE
3379
   if not found.  If the attribute appears more than once, this only
3380
   returns the first occurrence; the TREE_CHAIN of the return value should
3381
   be passed back in if further occurrences are wanted.  */
3382
 
3383
tree
3384
lookup_attribute (const char *attr_name, tree list)
3385
{
3386
  tree l;
3387
  size_t attr_len = strlen (attr_name);
3388
 
3389
  for (l = list; l; l = TREE_CHAIN (l))
3390
    {
3391
      gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
3392
      if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
3393
        return l;
3394
    }
3395
 
3396
  return NULL_TREE;
3397
}
3398
 
3399
/* Return an attribute list that is the union of a1 and a2.  */
3400
 
3401
tree
3402
merge_attributes (tree a1, tree a2)
3403
{
3404
  tree attributes;
3405
 
3406
  /* Either one unset?  Take the set one.  */
3407
 
3408
  if ((attributes = a1) == 0)
3409
    attributes = a2;
3410
 
3411
  /* One that completely contains the other?  Take it.  */
3412
 
3413
  else if (a2 != 0 && ! attribute_list_contained (a1, a2))
3414
    {
3415
      if (attribute_list_contained (a2, a1))
3416
        attributes = a2;
3417
      else
3418
        {
3419
          /* Pick the longest list, and hang on the other list.  */
3420
 
3421
          if (list_length (a1) < list_length (a2))
3422
            attributes = a2, a2 = a1;
3423
 
3424
          for (; a2 != 0; a2 = TREE_CHAIN (a2))
3425
            {
3426
              tree a;
3427
              for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3428
                                         attributes);
3429
                   a != NULL_TREE;
3430
                   a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3431
                                         TREE_CHAIN (a)))
3432
                {
3433
                  if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1)
3434
                    break;
3435
                }
3436
              if (a == NULL_TREE)
3437
                {
3438
                  a1 = copy_node (a2);
3439
                  TREE_CHAIN (a1) = attributes;
3440
                  attributes = a1;
3441
                }
3442
            }
3443
        }
3444
    }
3445
  return attributes;
3446
}
3447
 
3448
/* Given types T1 and T2, merge their attributes and return
3449
  the result.  */
3450
 
3451
tree
3452
merge_type_attributes (tree t1, tree t2)
3453
{
3454
  return merge_attributes (TYPE_ATTRIBUTES (t1),
3455
                           TYPE_ATTRIBUTES (t2));
3456
}
3457
 
3458
/* Given decls OLDDECL and NEWDECL, merge their attributes and return
3459
   the result.  */
3460
 
3461
tree
3462
merge_decl_attributes (tree olddecl, tree newdecl)
3463
{
3464
  return merge_attributes (DECL_ATTRIBUTES (olddecl),
3465
                           DECL_ATTRIBUTES (newdecl));
3466
}
3467
 
3468
#if TARGET_DLLIMPORT_DECL_ATTRIBUTES
3469
 
3470
/* Specialization of merge_decl_attributes for various Windows targets.
3471
 
3472
   This handles the following situation:
3473
 
3474
     __declspec (dllimport) int foo;
3475
     int foo;
3476
 
3477
   The second instance of `foo' nullifies the dllimport.  */
3478
 
3479
tree
3480
merge_dllimport_decl_attributes (tree old, tree new)
3481
{
3482
  tree a;
3483
  int delete_dllimport_p = 1;
3484
 
3485
  /* What we need to do here is remove from `old' dllimport if it doesn't
3486
     appear in `new'.  dllimport behaves like extern: if a declaration is
3487
     marked dllimport and a definition appears later, then the object
3488
     is not dllimport'd.  We also remove a `new' dllimport if the old list
3489
     contains dllexport:  dllexport always overrides dllimport, regardless
3490
     of the order of declaration.  */
3491
  if (!VAR_OR_FUNCTION_DECL_P (new))
3492
    delete_dllimport_p = 0;
3493
  else if (DECL_DLLIMPORT_P (new)
3494
           && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
3495
    {
3496
      DECL_DLLIMPORT_P (new) = 0;
3497
      warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
3498
              "dllimport ignored", new);
3499
    }
3500
  else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new))
3501
    {
3502
      /* Warn about overriding a symbol that has already been used. eg:
3503
           extern int __attribute__ ((dllimport)) foo;
3504
           int* bar () {return &foo;}
3505
           int foo;
3506
      */
3507
      if (TREE_USED (old))
3508
        {
3509
          warning (0, "%q+D redeclared without dllimport attribute "
3510
                   "after being referenced with dll linkage", new);
3511
          /* If we have used a variable's address with dllimport linkage,
3512
              keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
3513
              decl may already have had TREE_INVARIANT and TREE_CONSTANT
3514
              computed.
3515
              We still remove the attribute so that assembler code refers
3516
              to '&foo rather than '_imp__foo'.  */
3517
          if (TREE_CODE (old) == VAR_DECL && TREE_ADDRESSABLE (old))
3518
            DECL_DLLIMPORT_P (new) = 1;
3519
        }
3520
 
3521
      /* Let an inline definition silently override the external reference,
3522
         but otherwise warn about attribute inconsistency.  */
3523
      else if (TREE_CODE (new) == VAR_DECL
3524
               || !DECL_DECLARED_INLINE_P (new))
3525
        warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
3526
                  "previous dllimport ignored", new);
3527
    }
3528
  else
3529
    delete_dllimport_p = 0;
3530
 
3531
  a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new));
3532
 
3533
  if (delete_dllimport_p)
3534
    {
3535
      tree prev, t;
3536
      const size_t attr_len = strlen ("dllimport");
3537
 
3538
      /* Scan the list for dllimport and delete it.  */
3539
      for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
3540
        {
3541
          if (is_attribute_with_length_p ("dllimport", attr_len,
3542
                                          TREE_PURPOSE (t)))
3543
            {
3544
              if (prev == NULL_TREE)
3545
                a = TREE_CHAIN (a);
3546
              else
3547
                TREE_CHAIN (prev) = TREE_CHAIN (t);
3548
              break;
3549
            }
3550
        }
3551
    }
3552
 
3553
  return a;
3554
}
3555
 
3556
/* Handle a "dllimport" or "dllexport" attribute; arguments as in
3557
   struct attribute_spec.handler.  */
3558
 
3559
tree
3560
handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
3561
                      bool *no_add_attrs)
3562
{
3563
  tree node = *pnode;
3564
 
3565
  /* These attributes may apply to structure and union types being created,
3566
     but otherwise should pass to the declaration involved.  */
3567
  if (!DECL_P (node))
3568
    {
3569
      if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
3570
                   | (int) ATTR_FLAG_ARRAY_NEXT))
3571
        {
3572
          *no_add_attrs = true;
3573
          return tree_cons (name, args, NULL_TREE);
3574
        }
3575
      if (TREE_CODE (node) != RECORD_TYPE && TREE_CODE (node) != UNION_TYPE)
3576
        {
3577
          warning (OPT_Wattributes, "%qs attribute ignored",
3578
                   IDENTIFIER_POINTER (name));
3579
          *no_add_attrs = true;
3580
        }
3581
 
3582
      return NULL_TREE;
3583
    }
3584
 
3585
  /* Report error on dllimport ambiguities seen now before they cause
3586
     any damage.  */
3587
  if (is_attribute_p ("dllimport", name))
3588
    {
3589
      /* Honor any target-specific overrides. */
3590
      if (!targetm.valid_dllimport_attribute_p (node))
3591
        *no_add_attrs = true;
3592
 
3593
     else if (TREE_CODE (node) == FUNCTION_DECL
3594
                && DECL_DECLARED_INLINE_P (node))
3595
        {
3596
          warning (OPT_Wattributes, "inline function %q+D declared as "
3597
                  " dllimport: attribute ignored", node);
3598
          *no_add_attrs = true;
3599
        }
3600
      /* Like MS, treat definition of dllimported variables and
3601
         non-inlined functions on declaration as syntax errors. */
3602
     else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
3603
        {
3604
          error ("function %q+D definition is marked dllimport", node);
3605
          *no_add_attrs = true;
3606
        }
3607
 
3608
     else if (TREE_CODE (node) == VAR_DECL)
3609
        {
3610
          if (DECL_INITIAL (node))
3611
            {
3612
              error ("variable %q+D definition is marked dllimport",
3613
                     node);
3614
              *no_add_attrs = true;
3615
            }
3616
 
3617
          /* `extern' needn't be specified with dllimport.
3618
             Specify `extern' now and hope for the best.  Sigh.  */
3619
          DECL_EXTERNAL (node) = 1;
3620
          /* Also, implicitly give dllimport'd variables declared within
3621
             a function global scope, unless declared static.  */
3622
          if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
3623
            TREE_PUBLIC (node) = 1;
3624
        }
3625
 
3626
      if (*no_add_attrs == false)
3627
        DECL_DLLIMPORT_P (node) = 1;
3628
    }
3629
 
3630
  /*  Report error if symbol is not accessible at global scope.  */
3631
  if (!TREE_PUBLIC (node)
3632
      && (TREE_CODE (node) == VAR_DECL
3633
          || TREE_CODE (node) == FUNCTION_DECL))
3634
    {
3635
      error ("external linkage required for symbol %q+D because of "
3636
             "%qs attribute", node, IDENTIFIER_POINTER (name));
3637
      *no_add_attrs = true;
3638
    }
3639
 
3640
  return NULL_TREE;
3641
}
3642
 
3643
#endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES  */
3644
 
3645
/* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3646
   of the various TYPE_QUAL values.  */
3647
 
3648
static void
3649
set_type_quals (tree type, int type_quals)
3650
{
3651
  TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3652
  TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3653
  TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3654
}
3655
 
3656
/* Returns true iff cand is equivalent to base with type_quals.  */
3657
 
3658
bool
3659
check_qualified_type (tree cand, tree base, int type_quals)
3660
{
3661
  return (TYPE_QUALS (cand) == type_quals
3662
          && TYPE_NAME (cand) == TYPE_NAME (base)
3663
          /* Apparently this is needed for Objective-C.  */
3664
          && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
3665
          && attribute_list_equal (TYPE_ATTRIBUTES (cand),
3666
                                   TYPE_ATTRIBUTES (base)));
3667
}
3668
 
3669
/* Return a version of the TYPE, qualified as indicated by the
3670
   TYPE_QUALS, if one exists.  If no qualified version exists yet,
3671
   return NULL_TREE.  */
3672
 
3673
tree
3674
get_qualified_type (tree type, int type_quals)
3675
{
3676
  tree t;
3677
 
3678
  if (TYPE_QUALS (type) == type_quals)
3679
    return type;
3680
 
3681
  /* Search the chain of variants to see if there is already one there just
3682
     like the one we need to have.  If so, use that existing one.  We must
3683
     preserve the TYPE_NAME, since there is code that depends on this.  */
3684
  for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3685
    if (check_qualified_type (t, type, type_quals))
3686
      return t;
3687
 
3688
  return NULL_TREE;
3689
}
3690
 
3691
/* Like get_qualified_type, but creates the type if it does not
3692
   exist.  This function never returns NULL_TREE.  */
3693
 
3694
tree
3695
build_qualified_type (tree type, int type_quals)
3696
{
3697
  tree t;
3698
 
3699
  /* See if we already have the appropriate qualified variant.  */
3700
  t = get_qualified_type (type, type_quals);
3701
 
3702
  /* If not, build it.  */
3703
  if (!t)
3704
    {
3705
      t = build_variant_type_copy (type);
3706
      set_type_quals (t, type_quals);
3707
    }
3708
 
3709
  return t;
3710
}
3711
 
3712
/* Create a new distinct copy of TYPE.  The new type is made its own
3713
   MAIN_VARIANT.  */
3714
 
3715
tree
3716
build_distinct_type_copy (tree type)
3717
{
3718
  tree t = copy_node (type);
3719
 
3720
  TYPE_POINTER_TO (t) = 0;
3721
  TYPE_REFERENCE_TO (t) = 0;
3722
 
3723
  /* Make it its own variant.  */
3724
  TYPE_MAIN_VARIANT (t) = t;
3725
  TYPE_NEXT_VARIANT (t) = 0;
3726
 
3727
  return t;
3728
}
3729
 
3730
/* Create a new variant of TYPE, equivalent but distinct.
3731
   This is so the caller can modify it.  */
3732
 
3733
tree
3734
build_variant_type_copy (tree type)
3735
{
3736
  tree t, m = TYPE_MAIN_VARIANT (type);
3737
 
3738
  t = build_distinct_type_copy (type);
3739
 
3740
  /* Add the new type to the chain of variants of TYPE.  */
3741
  TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3742
  TYPE_NEXT_VARIANT (m) = t;
3743
  TYPE_MAIN_VARIANT (t) = m;
3744
 
3745
  return t;
3746
}
3747
 
3748
/* Return true if the from tree in both tree maps are equal.  */
3749
 
3750
int
3751
tree_map_eq (const void *va, const void *vb)
3752
{
3753
  const struct tree_map  *a = va, *b = vb;
3754
  return (a->from == b->from);
3755
}
3756
 
3757
/* Hash a from tree in a tree_map.  */
3758
 
3759
unsigned int
3760
tree_map_hash (const void *item)
3761
{
3762
  return (((const struct tree_map *) item)->hash);
3763
}
3764
 
3765
/* Return true if this tree map structure is marked for garbage collection
3766
   purposes.  We simply return true if the from tree is marked, so that this
3767
   structure goes away when the from tree goes away.  */
3768
 
3769
int
3770
tree_map_marked_p (const void *p)
3771
{
3772
  tree from = ((struct tree_map *) p)->from;
3773
 
3774
  return ggc_marked_p (from);
3775
}
3776
 
3777
/* Return true if the trees in the tree_int_map *'s VA and VB are equal.  */
3778
 
3779
static int
3780
tree_int_map_eq (const void *va, const void *vb)
3781
{
3782
  const struct tree_int_map  *a = va, *b = vb;
3783
  return (a->from == b->from);
3784
}
3785
 
3786
/* Hash a from tree in the tree_int_map * ITEM.  */
3787
 
3788
static unsigned int
3789
tree_int_map_hash (const void *item)
3790
{
3791
  return htab_hash_pointer (((const struct tree_int_map *)item)->from);
3792
}
3793
 
3794
/* Return true if this tree int map structure is marked for garbage collection
3795
   purposes.  We simply return true if the from tree_int_map *P's from tree is marked, so that this
3796
   structure goes away when the from tree goes away.  */
3797
 
3798
static int
3799
tree_int_map_marked_p (const void *p)
3800
{
3801
  tree from = ((struct tree_int_map *) p)->from;
3802
 
3803
  return ggc_marked_p (from);
3804
}
3805
/* Lookup an init priority for FROM, and return it if we find one.  */
3806
 
3807
unsigned short
3808
decl_init_priority_lookup (tree from)
3809
{
3810
  struct tree_int_map *h, in;
3811
  in.from = from;
3812
 
3813
  h = htab_find_with_hash (init_priority_for_decl,
3814
                           &in, htab_hash_pointer (from));
3815
  if (h)
3816
    return h->to;
3817
  return 0;
3818
}
3819
 
3820
/* Insert a mapping FROM->TO in the init priority hashtable.  */
3821
 
3822
void
3823
decl_init_priority_insert (tree from, unsigned short to)
3824
{
3825
  struct tree_int_map *h;
3826
  void **loc;
3827
 
3828
  h = ggc_alloc (sizeof (struct tree_int_map));
3829
  h->from = from;
3830
  h->to = to;
3831
  loc = htab_find_slot_with_hash (init_priority_for_decl, h,
3832
                                  htab_hash_pointer (from), INSERT);
3833
  *(struct tree_int_map **) loc = h;
3834
}
3835
 
3836
/* Look up a restrict qualified base decl for FROM.  */
3837
 
3838
tree
3839
decl_restrict_base_lookup (tree from)
3840
{
3841
  struct tree_map *h;
3842
  struct tree_map in;
3843
 
3844
  in.from = from;
3845
  h = htab_find_with_hash (restrict_base_for_decl, &in,
3846
                           htab_hash_pointer (from));
3847
  return h ? h->to : NULL_TREE;
3848
}
3849
 
3850
/* Record the restrict qualified base TO for FROM.  */
3851
 
3852
void
3853
decl_restrict_base_insert (tree from, tree to)
3854
{
3855
  struct tree_map *h;
3856
  void **loc;
3857
 
3858
  h = ggc_alloc (sizeof (struct tree_map));
3859
  h->hash = htab_hash_pointer (from);
3860
  h->from = from;
3861
  h->to = to;
3862
  loc = htab_find_slot_with_hash (restrict_base_for_decl, h, h->hash, INSERT);
3863
  *(struct tree_map **) loc = h;
3864
}
3865
 
3866
/* Print out the statistics for the DECL_DEBUG_EXPR hash table.  */
3867
 
3868
static void
3869
print_debug_expr_statistics (void)
3870
{
3871
  fprintf (stderr, "DECL_DEBUG_EXPR  hash: size %ld, %ld elements, %f collisions\n",
3872
           (long) htab_size (debug_expr_for_decl),
3873
           (long) htab_elements (debug_expr_for_decl),
3874
           htab_collisions (debug_expr_for_decl));
3875
}
3876
 
3877
/* Print out the statistics for the DECL_VALUE_EXPR hash table.  */
3878
 
3879
static void
3880
print_value_expr_statistics (void)
3881
{
3882
  fprintf (stderr, "DECL_VALUE_EXPR  hash: size %ld, %ld elements, %f collisions\n",
3883
           (long) htab_size (value_expr_for_decl),
3884
           (long) htab_elements (value_expr_for_decl),
3885
           htab_collisions (value_expr_for_decl));
3886
}
3887
 
3888
/* Print out statistics for the RESTRICT_BASE_FOR_DECL hash table, but
3889
   don't print anything if the table is empty.  */
3890
 
3891
static void
3892
print_restrict_base_statistics (void)
3893
{
3894
  if (htab_elements (restrict_base_for_decl) != 0)
3895
    fprintf (stderr,
3896
             "RESTRICT_BASE    hash: size %ld, %ld elements, %f collisions\n",
3897
             (long) htab_size (restrict_base_for_decl),
3898
             (long) htab_elements (restrict_base_for_decl),
3899
             htab_collisions (restrict_base_for_decl));
3900
}
3901
 
3902
/* Lookup a debug expression for FROM, and return it if we find one.  */
3903
 
3904
tree
3905
decl_debug_expr_lookup (tree from)
3906
{
3907
  struct tree_map *h, in;
3908
  in.from = from;
3909
 
3910
  h = htab_find_with_hash (debug_expr_for_decl, &in, htab_hash_pointer (from));
3911
  if (h)
3912
    return h->to;
3913
  return NULL_TREE;
3914
}
3915
 
3916
/* Insert a mapping FROM->TO in the debug expression hashtable.  */
3917
 
3918
void
3919
decl_debug_expr_insert (tree from, tree to)
3920
{
3921
  struct tree_map *h;
3922
  void **loc;
3923
 
3924
  h = ggc_alloc (sizeof (struct tree_map));
3925
  h->hash = htab_hash_pointer (from);
3926
  h->from = from;
3927
  h->to = to;
3928
  loc = htab_find_slot_with_hash (debug_expr_for_decl, h, h->hash, INSERT);
3929
  *(struct tree_map **) loc = h;
3930
}
3931
 
3932
/* Lookup a value expression for FROM, and return it if we find one.  */
3933
 
3934
tree
3935
decl_value_expr_lookup (tree from)
3936
{
3937
  struct tree_map *h, in;
3938
  in.from = from;
3939
 
3940
  h = htab_find_with_hash (value_expr_for_decl, &in, htab_hash_pointer (from));
3941
  if (h)
3942
    return h->to;
3943
  return NULL_TREE;
3944
}
3945
 
3946
/* Insert a mapping FROM->TO in the value expression hashtable.  */
3947
 
3948
void
3949
decl_value_expr_insert (tree from, tree to)
3950
{
3951
  struct tree_map *h;
3952
  void **loc;
3953
 
3954
  h = ggc_alloc (sizeof (struct tree_map));
3955
  h->hash = htab_hash_pointer (from);
3956
  h->from = from;
3957
  h->to = to;
3958
  loc = htab_find_slot_with_hash (value_expr_for_decl, h, h->hash, INSERT);
3959
  *(struct tree_map **) loc = h;
3960
}
3961
 
3962
/* Hashing of types so that we don't make duplicates.
3963
   The entry point is `type_hash_canon'.  */
3964
 
3965
/* Compute a hash code for a list of types (chain of TREE_LIST nodes
3966
   with types in the TREE_VALUE slots), by adding the hash codes
3967
   of the individual types.  */
3968
 
3969
unsigned int
3970
type_hash_list (tree list, hashval_t hashcode)
3971
{
3972
  tree tail;
3973
 
3974
  for (tail = list; tail; tail = TREE_CHAIN (tail))
3975
    if (TREE_VALUE (tail) != error_mark_node)
3976
      hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
3977
                                        hashcode);
3978
 
3979
  return hashcode;
3980
}
3981
 
3982
/* These are the Hashtable callback functions.  */
3983
 
3984
/* Returns true iff the types are equivalent.  */
3985
 
3986
static int
3987
type_hash_eq (const void *va, const void *vb)
3988
{
3989
  const struct type_hash *a = va, *b = vb;
3990
 
3991
  /* First test the things that are the same for all types.  */
3992
  if (a->hash != b->hash
3993
      || TREE_CODE (a->type) != TREE_CODE (b->type)
3994
      || TREE_TYPE (a->type) != TREE_TYPE (b->type)
3995
      || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
3996
                                 TYPE_ATTRIBUTES (b->type))
3997
      || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
3998
      || TYPE_MODE (a->type) != TYPE_MODE (b->type))
3999
    return 0;
4000
 
4001
  switch (TREE_CODE (a->type))
4002
    {
4003
    case VOID_TYPE:
4004
    case COMPLEX_TYPE:
4005
    case POINTER_TYPE:
4006
    case REFERENCE_TYPE:
4007
      return 1;
4008
 
4009
    case VECTOR_TYPE:
4010
      return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
4011
 
4012
    case ENUMERAL_TYPE:
4013
      if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
4014
          && !(TYPE_VALUES (a->type)
4015
               && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
4016
               && TYPE_VALUES (b->type)
4017
               && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
4018
               && type_list_equal (TYPE_VALUES (a->type),
4019
                                   TYPE_VALUES (b->type))))
4020
        return 0;
4021
 
4022
      /* ... fall through ... */
4023
 
4024
    case INTEGER_TYPE:
4025
    case REAL_TYPE:
4026
    case BOOLEAN_TYPE:
4027
    case CHAR_TYPE:
4028
      return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
4029
               || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
4030
                                      TYPE_MAX_VALUE (b->type)))
4031
              && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
4032
                  || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
4033
                                         TYPE_MIN_VALUE (b->type))));
4034
 
4035
    case OFFSET_TYPE:
4036
      return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
4037
 
4038
    case METHOD_TYPE:
4039
      return (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
4040
              && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
4041
                  || (TYPE_ARG_TYPES (a->type)
4042
                      && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
4043
                      && TYPE_ARG_TYPES (b->type)
4044
                      && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
4045
                      && type_list_equal (TYPE_ARG_TYPES (a->type),
4046
                                          TYPE_ARG_TYPES (b->type)))));
4047
 
4048
    case ARRAY_TYPE:
4049
      return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
4050
 
4051
    case RECORD_TYPE:
4052
    case UNION_TYPE:
4053
    case QUAL_UNION_TYPE:
4054
      return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
4055
              || (TYPE_FIELDS (a->type)
4056
                  && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
4057
                  && TYPE_FIELDS (b->type)
4058
                  && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
4059
                  && type_list_equal (TYPE_FIELDS (a->type),
4060
                                      TYPE_FIELDS (b->type))));
4061
 
4062
    case FUNCTION_TYPE:
4063
      return (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
4064
              || (TYPE_ARG_TYPES (a->type)
4065
                  && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
4066
                  && TYPE_ARG_TYPES (b->type)
4067
                  && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
4068
                  && type_list_equal (TYPE_ARG_TYPES (a->type),
4069
                                      TYPE_ARG_TYPES (b->type))));
4070
 
4071
    default:
4072
      return 0;
4073
    }
4074
}
4075
 
4076
/* Return the cached hash value.  */
4077
 
4078
static hashval_t
4079
type_hash_hash (const void *item)
4080
{
4081
  return ((const struct type_hash *) item)->hash;
4082
}
4083
 
4084
/* Look in the type hash table for a type isomorphic to TYPE.
4085
   If one is found, return it.  Otherwise return 0.  */
4086
 
4087
tree
4088
type_hash_lookup (hashval_t hashcode, tree type)
4089
{
4090
  struct type_hash *h, in;
4091
 
4092
  /* The TYPE_ALIGN field of a type is set by layout_type(), so we
4093
     must call that routine before comparing TYPE_ALIGNs.  */
4094
  layout_type (type);
4095
 
4096
  in.hash = hashcode;
4097
  in.type = type;
4098
 
4099
  h = htab_find_with_hash (type_hash_table, &in, hashcode);
4100
  if (h)
4101
    return h->type;
4102
  return NULL_TREE;
4103
}
4104
 
4105
/* Add an entry to the type-hash-table
4106
   for a type TYPE whose hash code is HASHCODE.  */
4107
 
4108
void
4109
type_hash_add (hashval_t hashcode, tree type)
4110
{
4111
  struct type_hash *h;
4112
  void **loc;
4113
 
4114
  h = ggc_alloc (sizeof (struct type_hash));
4115
  h->hash = hashcode;
4116
  h->type = type;
4117
  loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
4118
  *(struct type_hash **) loc = h;
4119
}
4120
 
4121
/* Given TYPE, and HASHCODE its hash code, return the canonical
4122
   object for an identical type if one already exists.
4123
   Otherwise, return TYPE, and record it as the canonical object.
4124
 
4125
   To use this function, first create a type of the sort you want.
4126
   Then compute its hash code from the fields of the type that
4127
   make it different from other similar types.
4128
   Then call this function and use the value.  */
4129
 
4130
tree
4131
type_hash_canon (unsigned int hashcode, tree type)
4132
{
4133
  tree t1;
4134
 
4135
  /* The hash table only contains main variants, so ensure that's what we're
4136
     being passed.  */
4137
  gcc_assert (TYPE_MAIN_VARIANT (type) == type);
4138
 
4139
  if (!lang_hooks.types.hash_types)
4140
    return type;
4141
 
4142
  /* See if the type is in the hash table already.  If so, return it.
4143
     Otherwise, add the type.  */
4144
  t1 = type_hash_lookup (hashcode, type);
4145
  if (t1 != 0)
4146
    {
4147
#ifdef GATHER_STATISTICS
4148
      tree_node_counts[(int) t_kind]--;
4149
      tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
4150
#endif
4151
      return t1;
4152
    }
4153
  else
4154
    {
4155
      type_hash_add (hashcode, type);
4156
      return type;
4157
    }
4158
}
4159
 
4160
/* See if the data pointed to by the type hash table is marked.  We consider
4161
   it marked if the type is marked or if a debug type number or symbol
4162
   table entry has been made for the type.  This reduces the amount of
4163
   debugging output and eliminates that dependency of the debug output on
4164
   the number of garbage collections.  */
4165
 
4166
static int
4167
type_hash_marked_p (const void *p)
4168
{
4169
  tree type = ((struct type_hash *) p)->type;
4170
 
4171
  return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
4172
}
4173
 
4174
static void
4175
print_type_hash_statistics (void)
4176
{
4177
  fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
4178
           (long) htab_size (type_hash_table),
4179
           (long) htab_elements (type_hash_table),
4180
           htab_collisions (type_hash_table));
4181
}
4182
 
4183
/* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
4184
   with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
4185
   by adding the hash codes of the individual attributes.  */
4186
 
4187
unsigned int
4188
attribute_hash_list (tree list, hashval_t hashcode)
4189
{
4190
  tree tail;
4191
 
4192
  for (tail = list; tail; tail = TREE_CHAIN (tail))
4193
    /* ??? Do we want to add in TREE_VALUE too? */
4194
    hashcode = iterative_hash_object
4195
      (IDENTIFIER_HASH_VALUE (TREE_PURPOSE (tail)), hashcode);
4196
  return hashcode;
4197
}
4198
 
4199
/* Given two lists of attributes, return true if list l2 is
4200
   equivalent to l1.  */
4201
 
4202
int
4203
attribute_list_equal (tree l1, tree l2)
4204
{
4205
  return attribute_list_contained (l1, l2)
4206
         && attribute_list_contained (l2, l1);
4207
}
4208
 
4209
/* Given two lists of attributes, return true if list L2 is
4210
   completely contained within L1.  */
4211
/* ??? This would be faster if attribute names were stored in a canonicalized
4212
   form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
4213
   must be used to show these elements are equivalent (which they are).  */
4214
/* ??? It's not clear that attributes with arguments will always be handled
4215
   correctly.  */
4216
 
4217
int
4218
attribute_list_contained (tree l1, tree l2)
4219
{
4220
  tree t1, t2;
4221
 
4222
  /* First check the obvious, maybe the lists are identical.  */
4223
  if (l1 == l2)
4224
    return 1;
4225
 
4226
  /* Maybe the lists are similar.  */
4227
  for (t1 = l1, t2 = l2;
4228
       t1 != 0 && t2 != 0
4229
        && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
4230
        && TREE_VALUE (t1) == TREE_VALUE (t2);
4231
       t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
4232
 
4233
  /* Maybe the lists are equal.  */
4234
  if (t1 == 0 && t2 == 0)
4235
    return 1;
4236
 
4237
  for (; t2 != 0; t2 = TREE_CHAIN (t2))
4238
    {
4239
      tree attr;
4240
      for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
4241
           attr != NULL_TREE;
4242
           attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
4243
                                    TREE_CHAIN (attr)))
4244
        {
4245
          if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
4246
            break;
4247
        }
4248
 
4249
      if (attr == 0)
4250
        return 0;
4251
 
4252
      if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
4253
        return 0;
4254
    }
4255
 
4256
  return 1;
4257
}
4258
 
4259
/* Given two lists of types
4260
   (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
4261
   return 1 if the lists contain the same types in the same order.
4262
   Also, the TREE_PURPOSEs must match.  */
4263
 
4264
int
4265
type_list_equal (tree l1, tree l2)
4266
{
4267
  tree t1, t2;
4268
 
4269
  for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
4270
    if (TREE_VALUE (t1) != TREE_VALUE (t2)
4271
        || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
4272
            && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
4273
                  && (TREE_TYPE (TREE_PURPOSE (t1))
4274
                      == TREE_TYPE (TREE_PURPOSE (t2))))))
4275
      return 0;
4276
 
4277
  return t1 == t2;
4278
}
4279
 
4280
/* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
4281
   given by TYPE.  If the argument list accepts variable arguments,
4282
   then this function counts only the ordinary arguments.  */
4283
 
4284
int
4285
type_num_arguments (tree type)
4286
{
4287
  int i = 0;
4288
  tree t;
4289
 
4290
  for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
4291
    /* If the function does not take a variable number of arguments,
4292
       the last element in the list will have type `void'.  */
4293
    if (VOID_TYPE_P (TREE_VALUE (t)))
4294
      break;
4295
    else
4296
      ++i;
4297
 
4298
  return i;
4299
}
4300
 
4301
/* Nonzero if integer constants T1 and T2
4302
   represent the same constant value.  */
4303
 
4304
int
4305
tree_int_cst_equal (tree t1, tree t2)
4306
{
4307
  if (t1 == t2)
4308
    return 1;
4309
 
4310
  if (t1 == 0 || t2 == 0)
4311
    return 0;
4312
 
4313
  if (TREE_CODE (t1) == INTEGER_CST
4314
      && TREE_CODE (t2) == INTEGER_CST
4315
      && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4316
      && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
4317
    return 1;
4318
 
4319
  return 0;
4320
}
4321
 
4322
/* Nonzero if integer constants T1 and T2 represent values that satisfy <.
4323
   The precise way of comparison depends on their data type.  */
4324
 
4325
int
4326
tree_int_cst_lt (tree t1, tree t2)
4327
{
4328
  if (t1 == t2)
4329
    return 0;
4330
 
4331
  if (TYPE_UNSIGNED (TREE_TYPE (t1)) != TYPE_UNSIGNED (TREE_TYPE (t2)))
4332
    {
4333
      int t1_sgn = tree_int_cst_sgn (t1);
4334
      int t2_sgn = tree_int_cst_sgn (t2);
4335
 
4336
      if (t1_sgn < t2_sgn)
4337
        return 1;
4338
      else if (t1_sgn > t2_sgn)
4339
        return 0;
4340
      /* Otherwise, both are non-negative, so we compare them as
4341
         unsigned just in case one of them would overflow a signed
4342
         type.  */
4343
    }
4344
  else if (!TYPE_UNSIGNED (TREE_TYPE (t1)))
4345
    return INT_CST_LT (t1, t2);
4346
 
4347
  return INT_CST_LT_UNSIGNED (t1, t2);
4348
}
4349
 
4350
/* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2.  */
4351
 
4352
int
4353
tree_int_cst_compare (tree t1, tree t2)
4354
{
4355
  if (tree_int_cst_lt (t1, t2))
4356
    return -1;
4357
  else if (tree_int_cst_lt (t2, t1))
4358
    return 1;
4359
  else
4360
    return 0;
4361
}
4362
 
4363
/* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
4364
   the host.  If POS is zero, the value can be represented in a single
4365
   HOST_WIDE_INT.  If POS is nonzero, the value must be non-negative and can
4366
   be represented in a single unsigned HOST_WIDE_INT.  */
4367
 
4368
int
4369
host_integerp (tree t, int pos)
4370
{
4371
  return (TREE_CODE (t) == INTEGER_CST
4372
          && ! TREE_OVERFLOW (t)
4373
          && ((TREE_INT_CST_HIGH (t) == 0
4374
               && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
4375
              || (! pos && TREE_INT_CST_HIGH (t) == -1
4376
                  && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
4377
                  && !TYPE_UNSIGNED (TREE_TYPE (t)))
4378
              || (pos && TREE_INT_CST_HIGH (t) == 0)));
4379
}
4380
 
4381
/* Return the HOST_WIDE_INT least significant bits of T if it is an
4382
   INTEGER_CST and there is no overflow.  POS is nonzero if the result must
4383
   be non-negative.  We must be able to satisfy the above conditions.  */
4384
 
4385
HOST_WIDE_INT
4386
tree_low_cst (tree t, int pos)
4387
{
4388
  gcc_assert (host_integerp (t, pos));
4389
  return TREE_INT_CST_LOW (t);
4390
}
4391
 
4392
/* Return the most significant bit of the integer constant T.  */
4393
 
4394
int
4395
tree_int_cst_msb (tree t)
4396
{
4397
  int prec;
4398
  HOST_WIDE_INT h;
4399
  unsigned HOST_WIDE_INT l;
4400
 
4401
  /* Note that using TYPE_PRECISION here is wrong.  We care about the
4402
     actual bits, not the (arbitrary) range of the type.  */
4403
  prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
4404
  rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
4405
                 2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
4406
  return (l & 1) == 1;
4407
}
4408
 
4409
/* Return an indication of the sign of the integer constant T.
4410
   The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
4411
   Note that -1 will never be returned if T's type is unsigned.  */
4412
 
4413
int
4414
tree_int_cst_sgn (tree t)
4415
{
4416
  if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
4417
    return 0;
4418
  else if (TYPE_UNSIGNED (TREE_TYPE (t)))
4419
    return 1;
4420
  else if (TREE_INT_CST_HIGH (t) < 0)
4421
    return -1;
4422
  else
4423
    return 1;
4424
}
4425
 
4426
/* Compare two constructor-element-type constants.  Return 1 if the lists
4427
   are known to be equal; otherwise return 0.  */
4428
 
4429
int
4430
simple_cst_list_equal (tree l1, tree l2)
4431
{
4432
  while (l1 != NULL_TREE && l2 != NULL_TREE)
4433
    {
4434
      if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4435
        return 0;
4436
 
4437
      l1 = TREE_CHAIN (l1);
4438
      l2 = TREE_CHAIN (l2);
4439
    }
4440
 
4441
  return l1 == l2;
4442
}
4443
 
4444
/* Return truthvalue of whether T1 is the same tree structure as T2.
4445
   Return 1 if they are the same.
4446
   Return 0 if they are understandably different.
4447
   Return -1 if either contains tree structure not understood by
4448
   this function.  */
4449
 
4450
int
4451
simple_cst_equal (tree t1, tree t2)
4452
{
4453
  enum tree_code code1, code2;
4454
  int cmp;
4455
  int i;
4456
 
4457
  if (t1 == t2)
4458
    return 1;
4459
  if (t1 == 0 || t2 == 0)
4460
    return 0;
4461
 
4462
  code1 = TREE_CODE (t1);
4463
  code2 = TREE_CODE (t2);
4464
 
4465
  if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
4466
    {
4467
      if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4468
          || code2 == NON_LVALUE_EXPR)
4469
        return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4470
      else
4471
        return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
4472
    }
4473
 
4474
  else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4475
           || code2 == NON_LVALUE_EXPR)
4476
    return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
4477
 
4478
  if (code1 != code2)
4479
    return 0;
4480
 
4481
  switch (code1)
4482
    {
4483
    case INTEGER_CST:
4484
      return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4485
              && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
4486
 
4487
    case REAL_CST:
4488
      return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
4489
 
4490
    case STRING_CST:
4491
      return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
4492
              && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
4493
                         TREE_STRING_LENGTH (t1)));
4494
 
4495
    case CONSTRUCTOR:
4496
      {
4497
        unsigned HOST_WIDE_INT idx;
4498
        VEC(constructor_elt, gc) *v1 = CONSTRUCTOR_ELTS (t1);
4499
        VEC(constructor_elt, gc) *v2 = CONSTRUCTOR_ELTS (t2);
4500
 
4501
        if (VEC_length (constructor_elt, v1) != VEC_length (constructor_elt, v2))
4502
          return false;
4503
 
4504
        for (idx = 0; idx < VEC_length (constructor_elt, v1); ++idx)
4505
          /* ??? Should we handle also fields here? */
4506
          if (!simple_cst_equal (VEC_index (constructor_elt, v1, idx)->value,
4507
                                 VEC_index (constructor_elt, v2, idx)->value))
4508
            return false;
4509
        return true;
4510
      }
4511
 
4512
    case SAVE_EXPR:
4513
      return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4514
 
4515
    case CALL_EXPR:
4516
      cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4517
      if (cmp <= 0)
4518
        return cmp;
4519
      return
4520
        simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4521
 
4522
    case TARGET_EXPR:
4523
      /* Special case: if either target is an unallocated VAR_DECL,
4524
         it means that it's going to be unified with whatever the
4525
         TARGET_EXPR is really supposed to initialize, so treat it
4526
         as being equivalent to anything.  */
4527
      if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
4528
           && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
4529
           && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
4530
          || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
4531
              && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
4532
              && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
4533
        cmp = 1;
4534
      else
4535
        cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4536
 
4537
      if (cmp <= 0)
4538
        return cmp;
4539
 
4540
      return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4541
 
4542
    case WITH_CLEANUP_EXPR:
4543
      cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4544
      if (cmp <= 0)
4545
        return cmp;
4546
 
4547
      return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
4548
 
4549
    case COMPONENT_REF:
4550
      if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
4551
        return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4552
 
4553
      return 0;
4554
 
4555
    case VAR_DECL:
4556
    case PARM_DECL:
4557
    case CONST_DECL:
4558
    case FUNCTION_DECL:
4559
      return 0;
4560
 
4561
    default:
4562
      break;
4563
    }
4564
 
4565
  /* This general rule works for most tree codes.  All exceptions should be
4566
     handled above.  If this is a language-specific tree code, we can't
4567
     trust what might be in the operand, so say we don't know
4568
     the situation.  */
4569
  if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
4570
    return -1;
4571
 
4572
  switch (TREE_CODE_CLASS (code1))
4573
    {
4574
    case tcc_unary:
4575
    case tcc_binary:
4576
    case tcc_comparison:
4577
    case tcc_expression:
4578
    case tcc_reference:
4579
    case tcc_statement:
4580
      cmp = 1;
4581
      for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
4582
        {
4583
          cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
4584
          if (cmp <= 0)
4585
            return cmp;
4586
        }
4587
 
4588
      return cmp;
4589
 
4590
    default:
4591
      return -1;
4592
    }
4593
}
4594
 
4595
/* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
4596
   Return -1, 0, or 1 if the value of T is less than, equal to, or greater
4597
   than U, respectively.  */
4598
 
4599
int
4600
compare_tree_int (tree t, unsigned HOST_WIDE_INT u)
4601
{
4602
  if (tree_int_cst_sgn (t) < 0)
4603
    return -1;
4604
  else if (TREE_INT_CST_HIGH (t) != 0)
4605
    return 1;
4606
  else if (TREE_INT_CST_LOW (t) == u)
4607
    return 0;
4608
  else if (TREE_INT_CST_LOW (t) < u)
4609
    return -1;
4610
  else
4611
    return 1;
4612
}
4613
 
4614
/* Return true if CODE represents an associative tree code.  Otherwise
4615
   return false.  */
4616
bool
4617
associative_tree_code (enum tree_code code)
4618
{
4619
  switch (code)
4620
    {
4621
    case BIT_IOR_EXPR:
4622
    case BIT_AND_EXPR:
4623
    case BIT_XOR_EXPR:
4624
    case PLUS_EXPR:
4625
    case MULT_EXPR:
4626
    case MIN_EXPR:
4627
    case MAX_EXPR:
4628
      return true;
4629
 
4630
    default:
4631
      break;
4632
    }
4633
  return false;
4634
}
4635
 
4636
/* Return true if CODE represents a commutative tree code.  Otherwise
4637
   return false.  */
4638
bool
4639
commutative_tree_code (enum tree_code code)
4640
{
4641
  switch (code)
4642
    {
4643
    case PLUS_EXPR:
4644
    case MULT_EXPR:
4645
    case MIN_EXPR:
4646
    case MAX_EXPR:
4647
    case BIT_IOR_EXPR:
4648
    case BIT_XOR_EXPR:
4649
    case BIT_AND_EXPR:
4650
    case NE_EXPR:
4651
    case EQ_EXPR:
4652
    case UNORDERED_EXPR:
4653
    case ORDERED_EXPR:
4654
    case UNEQ_EXPR:
4655
    case LTGT_EXPR:
4656
    case TRUTH_AND_EXPR:
4657
    case TRUTH_XOR_EXPR:
4658
    case TRUTH_OR_EXPR:
4659
      return true;
4660
 
4661
    default:
4662
      break;
4663
    }
4664
  return false;
4665
}
4666
 
4667
/* Generate a hash value for an expression.  This can be used iteratively
4668
   by passing a previous result as the "val" argument.
4669
 
4670
   This function is intended to produce the same hash for expressions which
4671
   would compare equal using operand_equal_p.  */
4672
 
4673
hashval_t
4674
iterative_hash_expr (tree t, hashval_t val)
4675
{
4676
  int i;
4677
  enum tree_code code;
4678
  char class;
4679
 
4680
  if (t == NULL_TREE)
4681
    return iterative_hash_pointer (t, val);
4682
 
4683
  code = TREE_CODE (t);
4684
 
4685
  switch (code)
4686
    {
4687
    /* Alas, constants aren't shared, so we can't rely on pointer
4688
       identity.  */
4689
    case INTEGER_CST:
4690
      val = iterative_hash_host_wide_int (TREE_INT_CST_LOW (t), val);
4691
      return iterative_hash_host_wide_int (TREE_INT_CST_HIGH (t), val);
4692
    case REAL_CST:
4693
      {
4694
        unsigned int val2 = real_hash (TREE_REAL_CST_PTR (t));
4695
 
4696
        return iterative_hash_hashval_t (val2, val);
4697
      }
4698
    case STRING_CST:
4699
      return iterative_hash (TREE_STRING_POINTER (t),
4700
                             TREE_STRING_LENGTH (t), val);
4701
    case COMPLEX_CST:
4702
      val = iterative_hash_expr (TREE_REALPART (t), val);
4703
      return iterative_hash_expr (TREE_IMAGPART (t), val);
4704
    case VECTOR_CST:
4705
      return iterative_hash_expr (TREE_VECTOR_CST_ELTS (t), val);
4706
 
4707
    case SSA_NAME:
4708
    case VALUE_HANDLE:
4709
      /* we can just compare by pointer.  */
4710
      return iterative_hash_pointer (t, val);
4711
 
4712
    case TREE_LIST:
4713
      /* A list of expressions, for a CALL_EXPR or as the elements of a
4714
         VECTOR_CST.  */
4715
      for (; t; t = TREE_CHAIN (t))
4716
        val = iterative_hash_expr (TREE_VALUE (t), val);
4717
      return val;
4718
    case CONSTRUCTOR:
4719
      {
4720
        unsigned HOST_WIDE_INT idx;
4721
        tree field, value;
4722
        FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
4723
          {
4724
            val = iterative_hash_expr (field, val);
4725
            val = iterative_hash_expr (value, val);
4726
          }
4727
        return val;
4728
      }
4729
    case FUNCTION_DECL:
4730
      /* When referring to a built-in FUNCTION_DECL, use the
4731
         __builtin__ form.  Otherwise nodes that compare equal
4732
         according to operand_equal_p might get different
4733
         hash codes.  */
4734
      if (DECL_BUILT_IN (t))
4735
        {
4736
          val = iterative_hash_pointer (built_in_decls[DECL_FUNCTION_CODE (t)],
4737
                                      val);
4738
          return val;
4739
        }
4740
      /* else FALL THROUGH */
4741
    default:
4742
      class = TREE_CODE_CLASS (code);
4743
 
4744
      if (class == tcc_declaration)
4745
        {
4746
          /* Otherwise, we can just compare decls by pointer.  */
4747
          val = iterative_hash_pointer (t, val);
4748
        }
4749
      else
4750
        {
4751
          gcc_assert (IS_EXPR_CODE_CLASS (class));
4752
 
4753
          val = iterative_hash_object (code, val);
4754
 
4755
          /* Don't hash the type, that can lead to having nodes which
4756
             compare equal according to operand_equal_p, but which
4757
             have different hash codes.  */
4758
          if (code == NOP_EXPR
4759
              || code == CONVERT_EXPR
4760
              || code == NON_LVALUE_EXPR)
4761
            {
4762
              /* Make sure to include signness in the hash computation.  */
4763
              val += TYPE_UNSIGNED (TREE_TYPE (t));
4764
              val = iterative_hash_expr (TREE_OPERAND (t, 0), val);
4765
            }
4766
 
4767
          else if (commutative_tree_code (code))
4768
            {
4769
              /* It's a commutative expression.  We want to hash it the same
4770
                 however it appears.  We do this by first hashing both operands
4771
                 and then rehashing based on the order of their independent
4772
                 hashes.  */
4773
              hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
4774
              hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
4775
              hashval_t t;
4776
 
4777
              if (one > two)
4778
                t = one, one = two, two = t;
4779
 
4780
              val = iterative_hash_hashval_t (one, val);
4781
              val = iterative_hash_hashval_t (two, val);
4782
            }
4783
          else
4784
            for (i = TREE_CODE_LENGTH (code) - 1; i >= 0; --i)
4785
              val = iterative_hash_expr (TREE_OPERAND (t, i), val);
4786
        }
4787
      return val;
4788
      break;
4789
    }
4790
}
4791
 
4792
/* Constructors for pointer, array and function types.
4793
   (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
4794
   constructed by language-dependent code, not here.)  */
4795
 
4796
/* Construct, lay out and return the type of pointers to TO_TYPE with
4797
   mode MODE.  If CAN_ALIAS_ALL is TRUE, indicate this type can
4798
   reference all of memory. If such a type has already been
4799
   constructed, reuse it.  */
4800
 
4801
tree
4802
build_pointer_type_for_mode (tree to_type, enum machine_mode mode,
4803
                             bool can_alias_all)
4804
{
4805
  tree t;
4806
 
4807
  if (to_type == error_mark_node)
4808
    return error_mark_node;
4809
 
4810
  /* In some cases, languages will have things that aren't a POINTER_TYPE
4811
     (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
4812
     In that case, return that type without regard to the rest of our
4813
     operands.
4814
 
4815
     ??? This is a kludge, but consistent with the way this function has
4816
     always operated and there doesn't seem to be a good way to avoid this
4817
     at the moment.  */
4818
  if (TYPE_POINTER_TO (to_type) != 0
4819
      && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
4820
    return TYPE_POINTER_TO (to_type);
4821
 
4822
  /* First, if we already have a type for pointers to TO_TYPE and it's
4823
     the proper mode, use it.  */
4824
  for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
4825
    if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
4826
      return t;
4827
 
4828
  t = make_node (POINTER_TYPE);
4829
 
4830
  TREE_TYPE (t) = to_type;
4831
  TYPE_MODE (t) = mode;
4832
  TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
4833
  TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
4834
  TYPE_POINTER_TO (to_type) = t;
4835
 
4836
  /* Lay out the type.  This function has many callers that are concerned
4837
     with expression-construction, and this simplifies them all.  */
4838
  layout_type (t);
4839
 
4840
  return t;
4841
}
4842
 
4843
/* By default build pointers in ptr_mode.  */
4844
 
4845
tree
4846
build_pointer_type (tree to_type)
4847
{
4848
  return build_pointer_type_for_mode (to_type, ptr_mode, false);
4849
}
4850
 
4851
/* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE.  */
4852
 
4853
tree
4854
build_reference_type_for_mode (tree to_type, enum machine_mode mode,
4855
                               bool can_alias_all)
4856
{
4857
  tree t;
4858
 
4859
  /* In some cases, languages will have things that aren't a REFERENCE_TYPE
4860
     (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
4861
     In that case, return that type without regard to the rest of our
4862
     operands.
4863
 
4864
     ??? This is a kludge, but consistent with the way this function has
4865
     always operated and there doesn't seem to be a good way to avoid this
4866
     at the moment.  */
4867
  if (TYPE_REFERENCE_TO (to_type) != 0
4868
      && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
4869
    return TYPE_REFERENCE_TO (to_type);
4870
 
4871
  /* First, if we already have a type for pointers to TO_TYPE and it's
4872
     the proper mode, use it.  */
4873
  for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
4874
    if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
4875
      return t;
4876
 
4877
  t = make_node (REFERENCE_TYPE);
4878
 
4879
  TREE_TYPE (t) = to_type;
4880
  TYPE_MODE (t) = mode;
4881
  TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
4882
  TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
4883
  TYPE_REFERENCE_TO (to_type) = t;
4884
 
4885
  layout_type (t);
4886
 
4887
  return t;
4888
}
4889
 
4890
 
4891
/* Build the node for the type of references-to-TO_TYPE by default
4892
   in ptr_mode.  */
4893
 
4894
tree
4895
build_reference_type (tree to_type)
4896
{
4897
  return build_reference_type_for_mode (to_type, ptr_mode, false);
4898
}
4899
 
4900
/* Build a type that is compatible with t but has no cv quals anywhere
4901
   in its type, thus
4902
 
4903
   const char *const *const *  ->  char ***.  */
4904
 
4905
tree
4906
build_type_no_quals (tree t)
4907
{
4908
  switch (TREE_CODE (t))
4909
    {
4910
    case POINTER_TYPE:
4911
      return build_pointer_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
4912
                                          TYPE_MODE (t),
4913
                                          TYPE_REF_CAN_ALIAS_ALL (t));
4914
    case REFERENCE_TYPE:
4915
      return
4916
        build_reference_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
4917
                                       TYPE_MODE (t),
4918
                                       TYPE_REF_CAN_ALIAS_ALL (t));
4919
    default:
4920
      return TYPE_MAIN_VARIANT (t);
4921
    }
4922
}
4923
 
4924
/* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
4925
   MAXVAL should be the maximum value in the domain
4926
   (one less than the length of the array).
4927
 
4928
   The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
4929
   We don't enforce this limit, that is up to caller (e.g. language front end).
4930
   The limit exists because the result is a signed type and we don't handle
4931
   sizes that use more than one HOST_WIDE_INT.  */
4932
 
4933
tree
4934
build_index_type (tree maxval)
4935
{
4936
  tree itype = make_node (INTEGER_TYPE);
4937
 
4938
  TREE_TYPE (itype) = sizetype;
4939
  TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
4940
  TYPE_MIN_VALUE (itype) = size_zero_node;
4941
  TYPE_MAX_VALUE (itype) = fold_convert (sizetype, maxval);
4942
  TYPE_MODE (itype) = TYPE_MODE (sizetype);
4943
  TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
4944
  TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
4945
  TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
4946
  TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (sizetype);
4947
 
4948
  if (host_integerp (maxval, 1))
4949
    return type_hash_canon (tree_low_cst (maxval, 1), itype);
4950
  else
4951
    return itype;
4952
}
4953
 
4954
/* Builds a signed or unsigned integer type of precision PRECISION.
4955
   Used for C bitfields whose precision does not match that of
4956
   built-in target types.  */
4957
tree
4958
build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
4959
                                int unsignedp)
4960
{
4961
  tree itype = make_node (INTEGER_TYPE);
4962
 
4963
  TYPE_PRECISION (itype) = precision;
4964
 
4965
  if (unsignedp)
4966
    fixup_unsigned_type (itype);
4967
  else
4968
    fixup_signed_type (itype);
4969
 
4970
  if (host_integerp (TYPE_MAX_VALUE (itype), 1))
4971
    return type_hash_canon (tree_low_cst (TYPE_MAX_VALUE (itype), 1), itype);
4972
 
4973
  return itype;
4974
}
4975
 
4976
/* Create a range of some discrete type TYPE (an INTEGER_TYPE,
4977
   ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
4978
   low bound LOWVAL and high bound HIGHVAL.
4979
   if TYPE==NULL_TREE, sizetype is used.  */
4980
 
4981
tree
4982
build_range_type (tree type, tree lowval, tree highval)
4983
{
4984
  tree itype = make_node (INTEGER_TYPE);
4985
 
4986
  TREE_TYPE (itype) = type;
4987
  if (type == NULL_TREE)
4988
    type = sizetype;
4989
 
4990
  TYPE_MIN_VALUE (itype) = convert (type, lowval);
4991
  TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
4992
 
4993
  TYPE_PRECISION (itype) = TYPE_PRECISION (type);
4994
  TYPE_MODE (itype) = TYPE_MODE (type);
4995
  TYPE_SIZE (itype) = TYPE_SIZE (type);
4996
  TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
4997
  TYPE_ALIGN (itype) = TYPE_ALIGN (type);
4998
  TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
4999
 
5000
  if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
5001
    return type_hash_canon (tree_low_cst (highval, 0)
5002
                            - tree_low_cst (lowval, 0),
5003
                            itype);
5004
  else
5005
    return itype;
5006
}
5007
 
5008
/* Just like build_index_type, but takes lowval and highval instead
5009
   of just highval (maxval).  */
5010
 
5011
tree
5012
build_index_2_type (tree lowval, tree highval)
5013
{
5014
  return build_range_type (sizetype, lowval, highval);
5015
}
5016
 
5017
/* Construct, lay out and return the type of arrays of elements with ELT_TYPE
5018
   and number of elements specified by the range of values of INDEX_TYPE.
5019
   If such a type has already been constructed, reuse it.  */
5020
 
5021
tree
5022
build_array_type (tree elt_type, tree index_type)
5023
{
5024
  tree t;
5025
  hashval_t hashcode = 0;
5026
 
5027
  if (TREE_CODE (elt_type) == FUNCTION_TYPE)
5028
    {
5029
      error ("arrays of functions are not meaningful");
5030
      elt_type = integer_type_node;
5031
    }
5032
 
5033
  t = make_node (ARRAY_TYPE);
5034
  TREE_TYPE (t) = elt_type;
5035
  TYPE_DOMAIN (t) = index_type;
5036
 
5037
  if (index_type == 0)
5038
    {
5039
      layout_type (t);
5040
      return t;
5041
    }
5042
 
5043
  hashcode = iterative_hash_object (TYPE_HASH (elt_type), hashcode);
5044
  hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
5045
  t = type_hash_canon (hashcode, t);
5046
 
5047
  if (!COMPLETE_TYPE_P (t))
5048
    layout_type (t);
5049
  return t;
5050
}
5051
 
5052
/* Return the TYPE of the elements comprising
5053
   the innermost dimension of ARRAY.  */
5054
 
5055
tree
5056
get_inner_array_type (tree array)
5057
{
5058
  tree type = TREE_TYPE (array);
5059
 
5060
  while (TREE_CODE (type) == ARRAY_TYPE)
5061
    type = TREE_TYPE (type);
5062
 
5063
  return type;
5064
}
5065
 
5066
/* Construct, lay out and return
5067
   the type of functions returning type VALUE_TYPE
5068
   given arguments of types ARG_TYPES.
5069
   ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
5070
   are data type nodes for the arguments of the function.
5071
   If such a type has already been constructed, reuse it.  */
5072
 
5073
tree
5074
build_function_type (tree value_type, tree arg_types)
5075
{
5076
  tree t;
5077
  hashval_t hashcode = 0;
5078
 
5079
  if (TREE_CODE (value_type) == FUNCTION_TYPE)
5080
    {
5081
      error ("function return type cannot be function");
5082
      value_type = integer_type_node;
5083
    }
5084
 
5085
  /* Make a node of the sort we want.  */
5086
  t = make_node (FUNCTION_TYPE);
5087
  TREE_TYPE (t) = value_type;
5088
  TYPE_ARG_TYPES (t) = arg_types;
5089
 
5090
  /* If we already have such a type, use the old one.  */
5091
  hashcode = iterative_hash_object (TYPE_HASH (value_type), hashcode);
5092
  hashcode = type_hash_list (arg_types, hashcode);
5093
  t = type_hash_canon (hashcode, t);
5094
 
5095
  if (!COMPLETE_TYPE_P (t))
5096
    layout_type (t);
5097
  return t;
5098
}
5099
 
5100
/* Build a function type.  The RETURN_TYPE is the type returned by the
5101
   function.  If additional arguments are provided, they are
5102
   additional argument types.  The list of argument types must always
5103
   be terminated by NULL_TREE.  */
5104
 
5105
tree
5106
build_function_type_list (tree return_type, ...)
5107
{
5108
  tree t, args, last;
5109
  va_list p;
5110
 
5111
  va_start (p, return_type);
5112
 
5113
  t = va_arg (p, tree);
5114
  for (args = NULL_TREE; t != NULL_TREE; t = va_arg (p, tree))
5115
    args = tree_cons (NULL_TREE, t, args);
5116
 
5117
  if (args == NULL_TREE)
5118
    args = void_list_node;
5119
  else
5120
    {
5121
      last = args;
5122
      args = nreverse (args);
5123
      TREE_CHAIN (last) = void_list_node;
5124
    }
5125
  args = build_function_type (return_type, args);
5126
 
5127
  va_end (p);
5128
  return args;
5129
}
5130
 
5131
/* Build a METHOD_TYPE for a member of BASETYPE.  The RETTYPE (a TYPE)
5132
   and ARGTYPES (a TREE_LIST) are the return type and arguments types
5133
   for the method.  An implicit additional parameter (of type
5134
   pointer-to-BASETYPE) is added to the ARGTYPES.  */
5135
 
5136
tree
5137
build_method_type_directly (tree basetype,
5138
                            tree rettype,
5139
                            tree argtypes)
5140
{
5141
  tree t;
5142
  tree ptype;
5143
  int hashcode = 0;
5144
 
5145
  /* Make a node of the sort we want.  */
5146
  t = make_node (METHOD_TYPE);
5147
 
5148
  TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
5149
  TREE_TYPE (t) = rettype;
5150
  ptype = build_pointer_type (basetype);
5151
 
5152
  /* The actual arglist for this function includes a "hidden" argument
5153
     which is "this".  Put it into the list of argument types.  */
5154
  argtypes = tree_cons (NULL_TREE, ptype, argtypes);
5155
  TYPE_ARG_TYPES (t) = argtypes;
5156
 
5157
  /* If we already have such a type, use the old one.  */
5158
  hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
5159
  hashcode = iterative_hash_object (TYPE_HASH (rettype), hashcode);
5160
  hashcode = type_hash_list (argtypes, hashcode);
5161
  t = type_hash_canon (hashcode, t);
5162
 
5163
  if (!COMPLETE_TYPE_P (t))
5164
    layout_type (t);
5165
 
5166
  return t;
5167
}
5168
 
5169
/* Construct, lay out and return the type of methods belonging to class
5170
   BASETYPE and whose arguments and values are described by TYPE.
5171
   If that type exists already, reuse it.
5172
   TYPE must be a FUNCTION_TYPE node.  */
5173
 
5174
tree
5175
build_method_type (tree basetype, tree type)
5176
{
5177
  gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
5178
 
5179
  return build_method_type_directly (basetype,
5180
                                     TREE_TYPE (type),
5181
                                     TYPE_ARG_TYPES (type));
5182
}
5183
 
5184
/* Construct, lay out and return the type of offsets to a value
5185
   of type TYPE, within an object of type BASETYPE.
5186
   If a suitable offset type exists already, reuse it.  */
5187
 
5188
tree
5189
build_offset_type (tree basetype, tree type)
5190
{
5191
  tree t;
5192
  hashval_t hashcode = 0;
5193
 
5194
  /* Make a node of the sort we want.  */
5195
  t = make_node (OFFSET_TYPE);
5196
 
5197
  TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
5198
  TREE_TYPE (t) = type;
5199
 
5200
  /* If we already have such a type, use the old one.  */
5201
  hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
5202
  hashcode = iterative_hash_object (TYPE_HASH (type), hashcode);
5203
  t = type_hash_canon (hashcode, t);
5204
 
5205
  if (!COMPLETE_TYPE_P (t))
5206
    layout_type (t);
5207
 
5208
  return t;
5209
}
5210
 
5211
/* Create a complex type whose components are COMPONENT_TYPE.  */
5212
 
5213
tree
5214
build_complex_type (tree component_type)
5215
{
5216
  tree t;
5217
  hashval_t hashcode;
5218
 
5219
  /* Make a node of the sort we want.  */
5220
  t = make_node (COMPLEX_TYPE);
5221
 
5222
  TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
5223
 
5224
  /* If we already have such a type, use the old one.  */
5225
  hashcode = iterative_hash_object (TYPE_HASH (component_type), 0);
5226
  t = type_hash_canon (hashcode, t);
5227
 
5228
  if (!COMPLETE_TYPE_P (t))
5229
    layout_type (t);
5230
 
5231
  /* If we are writing Dwarf2 output we need to create a name,
5232
     since complex is a fundamental type.  */
5233
  if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
5234
      && ! TYPE_NAME (t))
5235
    {
5236
      const char *name;
5237
      if (component_type == char_type_node)
5238
        name = "complex char";
5239
      else if (component_type == signed_char_type_node)
5240
        name = "complex signed char";
5241
      else if (component_type == unsigned_char_type_node)
5242
        name = "complex unsigned char";
5243
      else if (component_type == short_integer_type_node)
5244
        name = "complex short int";
5245
      else if (component_type == short_unsigned_type_node)
5246
        name = "complex short unsigned int";
5247
      else if (component_type == integer_type_node)
5248
        name = "complex int";
5249
      else if (component_type == unsigned_type_node)
5250
        name = "complex unsigned int";
5251
      else if (component_type == long_integer_type_node)
5252
        name = "complex long int";
5253
      else if (component_type == long_unsigned_type_node)
5254
        name = "complex long unsigned int";
5255
      else if (component_type == long_long_integer_type_node)
5256
        name = "complex long long int";
5257
      else if (component_type == long_long_unsigned_type_node)
5258
        name = "complex long long unsigned int";
5259
      else
5260
        name = 0;
5261
 
5262
      if (name != 0)
5263
        TYPE_NAME (t) = get_identifier (name);
5264
    }
5265
 
5266
  return build_qualified_type (t, TYPE_QUALS (component_type));
5267
}
5268
 
5269
/* Return OP, stripped of any conversions to wider types as much as is safe.
5270
   Converting the value back to OP's type makes a value equivalent to OP.
5271
 
5272
   If FOR_TYPE is nonzero, we return a value which, if converted to
5273
   type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
5274
 
5275
   If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
5276
   narrowest type that can hold the value, even if they don't exactly fit.
5277
   Otherwise, bit-field references are changed to a narrower type
5278
   only if they can be fetched directly from memory in that type.
5279
 
5280
   OP must have integer, real or enumeral type.  Pointers are not allowed!
5281
 
5282
   There are some cases where the obvious value we could return
5283
   would regenerate to OP if converted to OP's type,
5284
   but would not extend like OP to wider types.
5285
   If FOR_TYPE indicates such extension is contemplated, we eschew such values.
5286
   For example, if OP is (unsigned short)(signed char)-1,
5287
   we avoid returning (signed char)-1 if FOR_TYPE is int,
5288
   even though extending that to an unsigned short would regenerate OP,
5289
   since the result of extending (signed char)-1 to (int)
5290
   is different from (int) OP.  */
5291
 
5292
tree
5293
get_unwidened (tree op, tree for_type)
5294
{
5295
  /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
5296
  tree type = TREE_TYPE (op);
5297
  unsigned final_prec
5298
    = TYPE_PRECISION (for_type != 0 ? for_type : type);
5299
  int uns
5300
    = (for_type != 0 && for_type != type
5301
       && final_prec > TYPE_PRECISION (type)
5302
       && TYPE_UNSIGNED (type));
5303
  tree win = op;
5304
 
5305
  while (TREE_CODE (op) == NOP_EXPR
5306
         || TREE_CODE (op) == CONVERT_EXPR)
5307
    {
5308
      int bitschange;
5309
 
5310
      /* TYPE_PRECISION on vector types has different meaning
5311
         (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
5312
         so avoid them here.  */
5313
      if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
5314
        break;
5315
 
5316
      bitschange = TYPE_PRECISION (TREE_TYPE (op))
5317
                   - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
5318
 
5319
      /* Truncations are many-one so cannot be removed.
5320
         Unless we are later going to truncate down even farther.  */
5321
      if (bitschange < 0
5322
          && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
5323
        break;
5324
 
5325
      /* See what's inside this conversion.  If we decide to strip it,
5326
         we will set WIN.  */
5327
      op = TREE_OPERAND (op, 0);
5328
 
5329
      /* If we have not stripped any zero-extensions (uns is 0),
5330
         we can strip any kind of extension.
5331
         If we have previously stripped a zero-extension,
5332
         only zero-extensions can safely be stripped.
5333
         Any extension can be stripped if the bits it would produce
5334
         are all going to be discarded later by truncating to FOR_TYPE.  */
5335
 
5336
      if (bitschange > 0)
5337
        {
5338
          if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
5339
            win = op;
5340
          /* TYPE_UNSIGNED says whether this is a zero-extension.
5341
             Let's avoid computing it if it does not affect WIN
5342
             and if UNS will not be needed again.  */
5343
          if ((uns
5344
               || TREE_CODE (op) == NOP_EXPR
5345
               || TREE_CODE (op) == CONVERT_EXPR)
5346
              && TYPE_UNSIGNED (TREE_TYPE (op)))
5347
            {
5348
              uns = 1;
5349
              win = op;
5350
            }
5351
        }
5352
    }
5353
 
5354
  if (TREE_CODE (op) == COMPONENT_REF
5355
      /* Since type_for_size always gives an integer type.  */
5356
      && TREE_CODE (type) != REAL_TYPE
5357
      /* Don't crash if field not laid out yet.  */
5358
      && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
5359
      && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
5360
    {
5361
      unsigned int innerprec
5362
        = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
5363
      int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
5364
                       || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
5365
      type = lang_hooks.types.type_for_size (innerprec, unsignedp);
5366
 
5367
      /* We can get this structure field in the narrowest type it fits in.
5368
         If FOR_TYPE is 0, do this only for a field that matches the
5369
         narrower type exactly and is aligned for it
5370
         The resulting extension to its nominal type (a fullword type)
5371
         must fit the same conditions as for other extensions.  */
5372
 
5373
      if (type != 0
5374
          && INT_CST_LT_UNSIGNED (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (op)))
5375
          && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
5376
          && (! uns || final_prec <= innerprec || unsignedp))
5377
        {
5378
          win = build3 (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5379
                        TREE_OPERAND (op, 1), NULL_TREE);
5380
          TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5381
          TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5382
        }
5383
    }
5384
 
5385
  return win;
5386
}
5387
 
5388
/* Return OP or a simpler expression for a narrower value
5389
   which can be sign-extended or zero-extended to give back OP.
5390
   Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
5391
   or 0 if the value should be sign-extended.  */
5392
 
5393
tree
5394
get_narrower (tree op, int *unsignedp_ptr)
5395
{
5396
  int uns = 0;
5397
  int first = 1;
5398
  tree win = op;
5399
  bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
5400
 
5401
  while (TREE_CODE (op) == NOP_EXPR)
5402
    {
5403
      int bitschange
5404
        = (TYPE_PRECISION (TREE_TYPE (op))
5405
           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
5406
 
5407
      /* Truncations are many-one so cannot be removed.  */
5408
      if (bitschange < 0)
5409
        break;
5410
 
5411
      /* See what's inside this conversion.  If we decide to strip it,
5412
         we will set WIN.  */
5413
 
5414
      if (bitschange > 0)
5415
        {
5416
          op = TREE_OPERAND (op, 0);
5417
          /* An extension: the outermost one can be stripped,
5418
             but remember whether it is zero or sign extension.  */
5419
          if (first)
5420
            uns = TYPE_UNSIGNED (TREE_TYPE (op));
5421
          /* Otherwise, if a sign extension has been stripped,
5422
             only sign extensions can now be stripped;
5423
             if a zero extension has been stripped, only zero-extensions.  */
5424
          else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
5425
            break;
5426
          first = 0;
5427
        }
5428
      else /* bitschange == 0 */
5429
        {
5430
          /* A change in nominal type can always be stripped, but we must
5431
             preserve the unsignedness.  */
5432
          if (first)
5433
            uns = TYPE_UNSIGNED (TREE_TYPE (op));
5434
          first = 0;
5435
          op = TREE_OPERAND (op, 0);
5436
          /* Keep trying to narrow, but don't assign op to win if it
5437
             would turn an integral type into something else.  */
5438
          if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
5439
            continue;
5440
        }
5441
 
5442
      win = op;
5443
    }
5444
 
5445
  if (TREE_CODE (op) == COMPONENT_REF
5446
      /* Since type_for_size always gives an integer type.  */
5447
      && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
5448
      /* Ensure field is laid out already.  */
5449
      && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
5450
      && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
5451
    {
5452
      unsigned HOST_WIDE_INT innerprec
5453
        = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
5454
      int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
5455
                       || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
5456
      tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
5457
 
5458
      /* We can get this structure field in a narrower type that fits it,
5459
         but the resulting extension to its nominal type (a fullword type)
5460
         must satisfy the same conditions as for other extensions.
5461
 
5462
         Do this only for fields that are aligned (not bit-fields),
5463
         because when bit-field insns will be used there is no
5464
         advantage in doing this.  */
5465
 
5466
      if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
5467
          && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
5468
          && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
5469
          && type != 0)
5470
        {
5471
          if (first)
5472
            uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
5473
          win = build3 (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5474
                        TREE_OPERAND (op, 1), NULL_TREE);
5475
          TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5476
          TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5477
        }
5478
    }
5479
  *unsignedp_ptr = uns;
5480
  return win;
5481
}
5482
 
5483
/* Nonzero if integer constant C has a value that is permissible
5484
   for type TYPE (an INTEGER_TYPE).  */
5485
 
5486
int
5487
int_fits_type_p (tree c, tree type)
5488
{
5489
  tree type_low_bound = TYPE_MIN_VALUE (type);
5490
  tree type_high_bound = TYPE_MAX_VALUE (type);
5491
  bool ok_for_low_bound, ok_for_high_bound;
5492
  tree tmp;
5493
 
5494
  /* If at least one bound of the type is a constant integer, we can check
5495
     ourselves and maybe make a decision. If no such decision is possible, but
5496
     this type is a subtype, try checking against that.  Otherwise, use
5497
     force_fit_type, which checks against the precision.
5498
 
5499
     Compute the status for each possibly constant bound, and return if we see
5500
     one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
5501
     for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
5502
     for "constant known to fit".  */
5503
 
5504
  /* Check if C >= type_low_bound.  */
5505
  if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
5506
    {
5507
      if (tree_int_cst_lt (c, type_low_bound))
5508
        return 0;
5509
      ok_for_low_bound = true;
5510
    }
5511
  else
5512
    ok_for_low_bound = false;
5513
 
5514
  /* Check if c <= type_high_bound.  */
5515
  if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
5516
    {
5517
      if (tree_int_cst_lt (type_high_bound, c))
5518
        return 0;
5519
      ok_for_high_bound = true;
5520
    }
5521
  else
5522
    ok_for_high_bound = false;
5523
 
5524
  /* If the constant fits both bounds, the result is known.  */
5525
  if (ok_for_low_bound && ok_for_high_bound)
5526
    return 1;
5527
 
5528
  /* Perform some generic filtering which may allow making a decision
5529
     even if the bounds are not constant.  First, negative integers
5530
     never fit in unsigned types, */
5531
  if (TYPE_UNSIGNED (type) && tree_int_cst_sgn (c) < 0)
5532
    return 0;
5533
 
5534
  /* Second, narrower types always fit in wider ones.  */
5535
  if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
5536
    return 1;
5537
 
5538
  /* Third, unsigned integers with top bit set never fit signed types.  */
5539
  if (! TYPE_UNSIGNED (type)
5540
      && TYPE_UNSIGNED (TREE_TYPE (c))
5541
      && tree_int_cst_msb (c))
5542
    return 0;
5543
 
5544
  /* If we haven't been able to decide at this point, there nothing more we
5545
     can check ourselves here.  Look at the base type if we have one and it
5546
     has the same precision.  */
5547
  if (TREE_CODE (type) == INTEGER_TYPE
5548
      && TREE_TYPE (type) != 0
5549
      && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
5550
    return int_fits_type_p (c, TREE_TYPE (type));
5551
 
5552
  /* Or to force_fit_type, if nothing else.  */
5553
  tmp = copy_node (c);
5554
  TREE_TYPE (tmp) = type;
5555
  tmp = force_fit_type (tmp, -1, false, false);
5556
  return TREE_INT_CST_HIGH (tmp) == TREE_INT_CST_HIGH (c)
5557
         && TREE_INT_CST_LOW (tmp) == TREE_INT_CST_LOW (c);
5558
}
5559
 
5560
/* Subprogram of following function.  Called by walk_tree.
5561
 
5562
   Return *TP if it is an automatic variable or parameter of the
5563
   function passed in as DATA.  */
5564
 
5565
static tree
5566
find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
5567
{
5568
  tree fn = (tree) data;
5569
 
5570
  if (TYPE_P (*tp))
5571
    *walk_subtrees = 0;
5572
 
5573
  else if (DECL_P (*tp)
5574
           && lang_hooks.tree_inlining.auto_var_in_fn_p (*tp, fn))
5575
    return *tp;
5576
 
5577
  return NULL_TREE;
5578
}
5579
 
5580
/* Returns true if T is, contains, or refers to a type with variable
5581
   size.  If FN is nonzero, only return true if a modifier of the type
5582
   or position of FN is a variable or parameter inside FN.
5583
 
5584
   This concept is more general than that of C99 'variably modified types':
5585
   in C99, a struct type is never variably modified because a VLA may not
5586
   appear as a structure member.  However, in GNU C code like:
5587
 
5588
     struct S { int i[f()]; };
5589
 
5590
   is valid, and other languages may define similar constructs.  */
5591
 
5592
bool
5593
variably_modified_type_p (tree type, tree fn)
5594
{
5595
  tree t;
5596
 
5597
/* Test if T is either variable (if FN is zero) or an expression containing
5598
   a variable in FN.  */
5599
#define RETURN_TRUE_IF_VAR(T)                                           \
5600
  do { tree _t = (T);                                                   \
5601
    if (_t && _t != error_mark_node && TREE_CODE (_t) != INTEGER_CST    \
5602
        && (!fn || walk_tree (&_t, find_var_from_fn, fn, NULL)))        \
5603
      return true;  } while (0)
5604
 
5605
  if (type == error_mark_node)
5606
    return false;
5607
 
5608
  /* If TYPE itself has variable size, it is variably modified.
5609
 
5610
     We do not yet have a representation of the C99 '[*]' syntax.
5611
     When a representation is chosen, this function should be modified
5612
     to test for that case as well.  */
5613
  RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
5614
  RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT(type));
5615
 
5616
  switch (TREE_CODE (type))
5617
    {
5618
    case POINTER_TYPE:
5619
    case REFERENCE_TYPE:
5620
    case ARRAY_TYPE:
5621
    case VECTOR_TYPE:
5622
      if (variably_modified_type_p (TREE_TYPE (type), fn))
5623
        return true;
5624
      break;
5625
 
5626
    case FUNCTION_TYPE:
5627
    case METHOD_TYPE:
5628
      /* If TYPE is a function type, it is variably modified if any of the
5629
         parameters or the return type are variably modified.  */
5630
      if (variably_modified_type_p (TREE_TYPE (type), fn))
5631
          return true;
5632
 
5633
      for (t = TYPE_ARG_TYPES (type);
5634
           t && t != void_list_node;
5635
           t = TREE_CHAIN (t))
5636
        if (variably_modified_type_p (TREE_VALUE (t), fn))
5637
          return true;
5638
      break;
5639
 
5640
    case INTEGER_TYPE:
5641
    case REAL_TYPE:
5642
    case ENUMERAL_TYPE:
5643
    case BOOLEAN_TYPE:
5644
    case CHAR_TYPE:
5645
      /* Scalar types are variably modified if their end points
5646
         aren't constant.  */
5647
      RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
5648
      RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
5649
      break;
5650
 
5651
    case RECORD_TYPE:
5652
    case UNION_TYPE:
5653
    case QUAL_UNION_TYPE:
5654
      /* We can't see if any of the field are variably-modified by the
5655
         definition we normally use, since that would produce infinite
5656
         recursion via pointers.  */
5657
      /* This is variably modified if some field's type is.  */
5658
      for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
5659
        if (TREE_CODE (t) == FIELD_DECL)
5660
          {
5661
            RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
5662
            RETURN_TRUE_IF_VAR (DECL_SIZE (t));
5663
            RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
5664
 
5665
            if (TREE_CODE (type) == QUAL_UNION_TYPE)
5666
              RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
5667
          }
5668
        break;
5669
 
5670
    default:
5671
      break;
5672
    }
5673
 
5674
  /* The current language may have other cases to check, but in general,
5675
     all other types are not variably modified.  */
5676
  return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
5677
 
5678
#undef RETURN_TRUE_IF_VAR
5679
}
5680
 
5681
/* Given a DECL or TYPE, return the scope in which it was declared, or
5682
   NULL_TREE if there is no containing scope.  */
5683
 
5684
tree
5685
get_containing_scope (tree t)
5686
{
5687
  return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
5688
}
5689
 
5690
/* Return the innermost context enclosing DECL that is
5691
   a FUNCTION_DECL, or zero if none.  */
5692
 
5693
tree
5694
decl_function_context (tree decl)
5695
{
5696
  tree context;
5697
 
5698
  if (TREE_CODE (decl) == ERROR_MARK)
5699
    return 0;
5700
 
5701
  /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
5702
     where we look up the function at runtime.  Such functions always take
5703
     a first argument of type 'pointer to real context'.
5704
 
5705
     C++ should really be fixed to use DECL_CONTEXT for the real context,
5706
     and use something else for the "virtual context".  */
5707
  else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
5708
    context
5709
      = TYPE_MAIN_VARIANT
5710
        (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
5711
  else
5712
    context = DECL_CONTEXT (decl);
5713
 
5714
  while (context && TREE_CODE (context) != FUNCTION_DECL)
5715
    {
5716
      if (TREE_CODE (context) == BLOCK)
5717
        context = BLOCK_SUPERCONTEXT (context);
5718
      else
5719
        context = get_containing_scope (context);
5720
    }
5721
 
5722
  return context;
5723
}
5724
 
5725
/* Return the innermost context enclosing DECL that is
5726
   a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
5727
   TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
5728
 
5729
tree
5730
decl_type_context (tree decl)
5731
{
5732
  tree context = DECL_CONTEXT (decl);
5733
 
5734
  while (context)
5735
    switch (TREE_CODE (context))
5736
      {
5737
      case NAMESPACE_DECL:
5738
      case TRANSLATION_UNIT_DECL:
5739
        return NULL_TREE;
5740
 
5741
      case RECORD_TYPE:
5742
      case UNION_TYPE:
5743
      case QUAL_UNION_TYPE:
5744
        return context;
5745
 
5746
      case TYPE_DECL:
5747
      case FUNCTION_DECL:
5748
        context = DECL_CONTEXT (context);
5749
        break;
5750
 
5751
      case BLOCK:
5752
        context = BLOCK_SUPERCONTEXT (context);
5753
        break;
5754
 
5755
      default:
5756
        gcc_unreachable ();
5757
      }
5758
 
5759
  return NULL_TREE;
5760
}
5761
 
5762
/* CALL is a CALL_EXPR.  Return the declaration for the function
5763
   called, or NULL_TREE if the called function cannot be
5764
   determined.  */
5765
 
5766
tree
5767
get_callee_fndecl (tree call)
5768
{
5769
  tree addr;
5770
 
5771
  /* It's invalid to call this function with anything but a
5772
     CALL_EXPR.  */
5773
  gcc_assert (TREE_CODE (call) == CALL_EXPR);
5774
 
5775
  /* The first operand to the CALL is the address of the function
5776
     called.  */
5777
  addr = TREE_OPERAND (call, 0);
5778
 
5779
  STRIP_NOPS (addr);
5780
 
5781
  /* If this is a readonly function pointer, extract its initial value.  */
5782
  if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
5783
      && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
5784
      && DECL_INITIAL (addr))
5785
    addr = DECL_INITIAL (addr);
5786
 
5787
  /* If the address is just `&f' for some function `f', then we know
5788
     that `f' is being called.  */
5789
  if (TREE_CODE (addr) == ADDR_EXPR
5790
      && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
5791
    return TREE_OPERAND (addr, 0);
5792
 
5793
  /* We couldn't figure out what was being called.  Maybe the front
5794
     end has some idea.  */
5795
  return lang_hooks.lang_get_callee_fndecl (call);
5796
}
5797
 
5798
/* Print debugging information about tree nodes generated during the compile,
5799
   and any language-specific information.  */
5800
 
5801
void
5802
dump_tree_statistics (void)
5803
{
5804
#ifdef GATHER_STATISTICS
5805
  int i;
5806
  int total_nodes, total_bytes;
5807
#endif
5808
 
5809
  fprintf (stderr, "\n??? tree nodes created\n\n");
5810
#ifdef GATHER_STATISTICS
5811
  fprintf (stderr, "Kind                   Nodes      Bytes\n");
5812
  fprintf (stderr, "---------------------------------------\n");
5813
  total_nodes = total_bytes = 0;
5814
  for (i = 0; i < (int) all_kinds; i++)
5815
    {
5816
      fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
5817
               tree_node_counts[i], tree_node_sizes[i]);
5818
      total_nodes += tree_node_counts[i];
5819
      total_bytes += tree_node_sizes[i];
5820
    }
5821
  fprintf (stderr, "---------------------------------------\n");
5822
  fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
5823
  fprintf (stderr, "---------------------------------------\n");
5824
  ssanames_print_statistics ();
5825
  phinodes_print_statistics ();
5826
#else
5827
  fprintf (stderr, "(No per-node statistics)\n");
5828
#endif
5829
  print_type_hash_statistics ();
5830
  print_debug_expr_statistics ();
5831
  print_value_expr_statistics ();
5832
  print_restrict_base_statistics ();
5833
  lang_hooks.print_statistics ();
5834
}
5835
 
5836
#define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
5837
 
5838
/* Generate a crc32 of a string.  */
5839
 
5840
unsigned
5841
crc32_string (unsigned chksum, const char *string)
5842
{
5843
  do
5844
    {
5845
      unsigned value = *string << 24;
5846
      unsigned ix;
5847
 
5848
      for (ix = 8; ix--; value <<= 1)
5849
        {
5850
          unsigned feedback;
5851
 
5852
          feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
5853
          chksum <<= 1;
5854
          chksum ^= feedback;
5855
        }
5856
    }
5857
  while (*string++);
5858
  return chksum;
5859
}
5860
 
5861
/* P is a string that will be used in a symbol.  Mask out any characters
5862
   that are not valid in that context.  */
5863
 
5864
void
5865
clean_symbol_name (char *p)
5866
{
5867
  for (; *p; p++)
5868
    if (! (ISALNUM (*p)
5869
#ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
5870
            || *p == '$'
5871
#endif
5872
#ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
5873
            || *p == '.'
5874
#endif
5875
           ))
5876
      *p = '_';
5877
}
5878
 
5879
/* Generate a name for a function unique to this translation unit.
5880
   TYPE is some string to identify the purpose of this function to the
5881
   linker or collect2.  */
5882
 
5883
tree
5884
get_file_function_name_long (const char *type)
5885
{
5886
  char *buf;
5887
  const char *p;
5888
  char *q;
5889
 
5890
  if (first_global_object_name)
5891
    {
5892
      p = first_global_object_name;
5893
 
5894
      /* For type 'F', the generated name must be unique not only to this
5895
         translation unit but also to any given link.  Since global names
5896
         can be overloaded, we concatenate the first global object name
5897
         with a string derived from the file name of this object.  */
5898
      if (!strcmp (type, "F"))
5899
        {
5900
          const char *file = main_input_filename;
5901
 
5902
          if (! file)
5903
            file = input_filename;
5904
 
5905
          q = alloca (strlen (p) + 10);
5906
          sprintf (q, "%s_%08X", p, crc32_string (0, file));
5907
 
5908
          p = q;
5909
        }
5910
    }
5911
  else
5912
    {
5913
      /* We don't have anything that we know to be unique to this translation
5914
         unit, so use what we do have and throw in some randomness.  */
5915
      unsigned len;
5916
      const char *name = weak_global_object_name;
5917
      const char *file = main_input_filename;
5918
 
5919
      if (! name)
5920
        name = "";
5921
      if (! file)
5922
        file = input_filename;
5923
 
5924
      len = strlen (file);
5925
      q = alloca (9 * 2 + len + 1);
5926
      memcpy (q, file, len + 1);
5927
      clean_symbol_name (q);
5928
 
5929
      sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
5930
               crc32_string (0, flag_random_seed));
5931
 
5932
      p = q;
5933
    }
5934
 
5935
  buf = alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) + strlen (type));
5936
 
5937
  /* Set up the name of the file-level functions we may need.
5938
     Use a global object (which is already required to be unique over
5939
     the program) rather than the file name (which imposes extra
5940
     constraints).  */
5941
  sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
5942
 
5943
  return get_identifier (buf);
5944
}
5945
 
5946
/* If KIND=='I', return a suitable global initializer (constructor) name.
5947
   If KIND=='D', return a suitable global clean-up (destructor) name.  */
5948
 
5949
tree
5950
get_file_function_name (int kind)
5951
{
5952
  char p[2];
5953
 
5954
  p[0] = kind;
5955
  p[1] = 0;
5956
 
5957
  return get_file_function_name_long (p);
5958
}
5959
 
5960
#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
5961
 
5962
/* Complain that the tree code of NODE does not match the expected 0
5963
   terminated list of trailing codes. The trailing code list can be
5964
   empty, for a more vague error message.  FILE, LINE, and FUNCTION
5965
   are of the caller.  */
5966
 
5967
void
5968
tree_check_failed (const tree node, const char *file,
5969
                   int line, const char *function, ...)
5970
{
5971
  va_list args;
5972
  char *buffer;
5973
  unsigned length = 0;
5974
  int code;
5975
 
5976
  va_start (args, function);
5977
  while ((code = va_arg (args, int)))
5978
    length += 4 + strlen (tree_code_name[code]);
5979
  va_end (args);
5980
  if (length)
5981
    {
5982
      va_start (args, function);
5983
      length += strlen ("expected ");
5984
      buffer = alloca (length);
5985
      length = 0;
5986
      while ((code = va_arg (args, int)))
5987
        {
5988
          const char *prefix = length ? " or " : "expected ";
5989
 
5990
          strcpy (buffer + length, prefix);
5991
          length += strlen (prefix);
5992
          strcpy (buffer + length, tree_code_name[code]);
5993
          length += strlen (tree_code_name[code]);
5994
        }
5995
      va_end (args);
5996
    }
5997
  else
5998
    buffer = (char *)"unexpected node";
5999
 
6000
  internal_error ("tree check: %s, have %s in %s, at %s:%d",
6001
                  buffer, tree_code_name[TREE_CODE (node)],
6002
                  function, trim_filename (file), line);
6003
}
6004
 
6005
/* Complain that the tree code of NODE does match the expected 0
6006
   terminated list of trailing codes. FILE, LINE, and FUNCTION are of
6007
   the caller.  */
6008
 
6009
void
6010
tree_not_check_failed (const tree node, const char *file,
6011
                       int line, const char *function, ...)
6012
{
6013
  va_list args;
6014
  char *buffer;
6015
  unsigned length = 0;
6016
  int code;
6017
 
6018
  va_start (args, function);
6019
  while ((code = va_arg (args, int)))
6020
    length += 4 + strlen (tree_code_name[code]);
6021
  va_end (args);
6022
  va_start (args, function);
6023
  buffer = alloca (length);
6024
  length = 0;
6025
  while ((code = va_arg (args, int)))
6026
    {
6027
      if (length)
6028
        {
6029
          strcpy (buffer + length, " or ");
6030
          length += 4;
6031
        }
6032
      strcpy (buffer + length, tree_code_name[code]);
6033
      length += strlen (tree_code_name[code]);
6034
    }
6035
  va_end (args);
6036
 
6037
  internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
6038
                  buffer, tree_code_name[TREE_CODE (node)],
6039
                  function, trim_filename (file), line);
6040
}
6041
 
6042
/* Similar to tree_check_failed, except that we check for a class of tree
6043
   code, given in CL.  */
6044
 
6045
void
6046
tree_class_check_failed (const tree node, const enum tree_code_class cl,
6047
                         const char *file, int line, const char *function)
6048
{
6049
  internal_error
6050
    ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
6051
     TREE_CODE_CLASS_STRING (cl),
6052
     TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
6053
     tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
6054
}
6055
#undef DEFTREESTRUCT
6056
#define DEFTREESTRUCT(VAL, NAME) NAME,
6057
 
6058
static const char *ts_enum_names[] = {
6059
#include "treestruct.def"
6060
};
6061
#undef DEFTREESTRUCT
6062
 
6063
#define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
6064
 
6065
/* Similar to tree_class_check_failed, except that we check for
6066
   whether CODE contains the tree structure identified by EN.  */
6067
 
6068
void
6069
tree_contains_struct_check_failed (const tree node,
6070
                                   const enum tree_node_structure_enum en,
6071
                                   const char *file, int line,
6072
                                   const char *function)
6073
{
6074
  internal_error
6075
    ("tree check: expected tree that contains %qs structure, have %qs  in %s, at %s:%d",
6076
     TS_ENUM_NAME(en),
6077
     tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
6078
}
6079
 
6080
 
6081
/* Similar to above, except that the check is for the bounds of a TREE_VEC's
6082
   (dynamically sized) vector.  */
6083
 
6084
void
6085
tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
6086
                           const char *function)
6087
{
6088
  internal_error
6089
    ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
6090
     idx + 1, len, function, trim_filename (file), line);
6091
}
6092
 
6093
/* Similar to above, except that the check is for the bounds of a PHI_NODE's
6094
   (dynamically sized) vector.  */
6095
 
6096
void
6097
phi_node_elt_check_failed (int idx, int len, const char *file, int line,
6098
                            const char *function)
6099
{
6100
  internal_error
6101
    ("tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d",
6102
     idx + 1, len, function, trim_filename (file), line);
6103
}
6104
 
6105
/* Similar to above, except that the check is for the bounds of the operand
6106
   vector of an expression node.  */
6107
 
6108
void
6109
tree_operand_check_failed (int idx, enum tree_code code, const char *file,
6110
                           int line, const char *function)
6111
{
6112
  internal_error
6113
    ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
6114
     idx + 1, tree_code_name[code], TREE_CODE_LENGTH (code),
6115
     function, trim_filename (file), line);
6116
}
6117
#endif /* ENABLE_TREE_CHECKING */
6118
 
6119
/* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
6120
   and mapped to the machine mode MODE.  Initialize its fields and build
6121
   the information necessary for debugging output.  */
6122
 
6123
static tree
6124
make_vector_type (tree innertype, int nunits, enum machine_mode mode)
6125
{
6126
  tree t = make_node (VECTOR_TYPE);
6127
 
6128
  TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype);
6129
  SET_TYPE_VECTOR_SUBPARTS (t, nunits);
6130
  TYPE_MODE (t) = mode;
6131
  TYPE_READONLY (t) = TYPE_READONLY (innertype);
6132
  TYPE_VOLATILE (t) = TYPE_VOLATILE (innertype);
6133
 
6134
  layout_type (t);
6135
 
6136
  {
6137
    tree index = build_int_cst (NULL_TREE, nunits - 1);
6138
    tree array = build_array_type (innertype, build_index_type (index));
6139
    tree rt = make_node (RECORD_TYPE);
6140
 
6141
    TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
6142
    DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
6143
    layout_type (rt);
6144
    TYPE_DEBUG_REPRESENTATION_TYPE (t) = rt;
6145
    /* In dwarfout.c, type lookup uses TYPE_UID numbers.  We want to output
6146
       the representation type, and we want to find that die when looking up
6147
       the vector type.  This is most easily achieved by making the TYPE_UID
6148
       numbers equal.  */
6149
    TYPE_UID (rt) = TYPE_UID (t);
6150
  }
6151
 
6152
  /* Build our main variant, based on the main variant of the inner type.  */
6153
  if (TYPE_MAIN_VARIANT (innertype) != innertype)
6154
    {
6155
      tree innertype_main_variant = TYPE_MAIN_VARIANT (innertype);
6156
      unsigned int hash = TYPE_HASH (innertype_main_variant);
6157
      TYPE_MAIN_VARIANT (t)
6158
        = type_hash_canon (hash, make_vector_type (innertype_main_variant,
6159
                                                   nunits, mode));
6160
    }
6161
 
6162
  return t;
6163
}
6164
 
6165
static tree
6166
make_or_reuse_type (unsigned size, int unsignedp)
6167
{
6168
  if (size == INT_TYPE_SIZE)
6169
    return unsignedp ? unsigned_type_node : integer_type_node;
6170
  if (size == CHAR_TYPE_SIZE)
6171
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
6172
  if (size == SHORT_TYPE_SIZE)
6173
    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
6174
  if (size == LONG_TYPE_SIZE)
6175
    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
6176
  if (size == LONG_LONG_TYPE_SIZE)
6177
    return (unsignedp ? long_long_unsigned_type_node
6178
            : long_long_integer_type_node);
6179
 
6180
  if (unsignedp)
6181
    return make_unsigned_type (size);
6182
  else
6183
    return make_signed_type (size);
6184
}
6185
 
6186
/* Create nodes for all integer types (and error_mark_node) using the sizes
6187
   of C datatypes.  The caller should call set_sizetype soon after calling
6188
   this function to select one of the types as sizetype.  */
6189
 
6190
void
6191
build_common_tree_nodes (bool signed_char, bool signed_sizetype)
6192
{
6193
  error_mark_node = make_node (ERROR_MARK);
6194
  TREE_TYPE (error_mark_node) = error_mark_node;
6195
 
6196
  initialize_sizetypes (signed_sizetype);
6197
 
6198
  /* Define both `signed char' and `unsigned char'.  */
6199
  signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6200
  unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6201
 
6202
  /* Define `char', which is like either `signed char' or `unsigned char'
6203
     but not the same as either.  */
6204
  char_type_node
6205
    = (signed_char
6206
       ? make_signed_type (CHAR_TYPE_SIZE)
6207
       : make_unsigned_type (CHAR_TYPE_SIZE));
6208
 
6209
  short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6210
  short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6211
  integer_type_node = make_signed_type (INT_TYPE_SIZE);
6212
  unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6213
  long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6214
  long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6215
  long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6216
  long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6217
 
6218
  /* Define a boolean type.  This type only represents boolean values but
6219
     may be larger than char depending on the value of BOOL_TYPE_SIZE.
6220
     Front ends which want to override this size (i.e. Java) can redefine
6221
     boolean_type_node before calling build_common_tree_nodes_2.  */
6222
  boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6223
  TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6224
  TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
6225
  TYPE_PRECISION (boolean_type_node) = 1;
6226
 
6227
  /* Fill in the rest of the sized types.  Reuse existing type nodes
6228
     when possible.  */
6229
  intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
6230
  intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
6231
  intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
6232
  intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
6233
  intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
6234
 
6235
  unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
6236
  unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
6237
  unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
6238
  unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
6239
  unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
6240
 
6241
  access_public_node = get_identifier ("public");
6242
  access_protected_node = get_identifier ("protected");
6243
  access_private_node = get_identifier ("private");
6244
}
6245
 
6246
/* Call this function after calling build_common_tree_nodes and set_sizetype.
6247
   It will create several other common tree nodes.  */
6248
 
6249
void
6250
build_common_tree_nodes_2 (int short_double)
6251
{
6252
  /* Define these next since types below may used them.  */
6253
  integer_zero_node = build_int_cst (NULL_TREE, 0);
6254
  integer_one_node = build_int_cst (NULL_TREE, 1);
6255
  integer_minus_one_node = build_int_cst (NULL_TREE, -1);
6256
 
6257
  size_zero_node = size_int (0);
6258
  size_one_node = size_int (1);
6259
  bitsize_zero_node = bitsize_int (0);
6260
  bitsize_one_node = bitsize_int (1);
6261
  bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
6262
 
6263
  boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
6264
  boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
6265
 
6266
  void_type_node = make_node (VOID_TYPE);
6267
  layout_type (void_type_node);
6268
 
6269
  /* We are not going to have real types in C with less than byte alignment,
6270
     so we might as well not have any types that claim to have it.  */
6271
  TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
6272
  TYPE_USER_ALIGN (void_type_node) = 0;
6273
 
6274
  null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
6275
  layout_type (TREE_TYPE (null_pointer_node));
6276
 
6277
  ptr_type_node = build_pointer_type (void_type_node);
6278
  const_ptr_type_node
6279
    = build_pointer_type (build_type_variant (void_type_node, 1, 0));
6280
  fileptr_type_node = ptr_type_node;
6281
 
6282
  float_type_node = make_node (REAL_TYPE);
6283
  TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6284
  layout_type (float_type_node);
6285
 
6286
  double_type_node = make_node (REAL_TYPE);
6287
  if (short_double)
6288
    TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6289
  else
6290
    TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6291
  layout_type (double_type_node);
6292
 
6293
  long_double_type_node = make_node (REAL_TYPE);
6294
  TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6295
  layout_type (long_double_type_node);
6296
 
6297
  float_ptr_type_node = build_pointer_type (float_type_node);
6298
  double_ptr_type_node = build_pointer_type (double_type_node);
6299
  long_double_ptr_type_node = build_pointer_type (long_double_type_node);
6300
  integer_ptr_type_node = build_pointer_type (integer_type_node);
6301
 
6302
  complex_integer_type_node = make_node (COMPLEX_TYPE);
6303
  TREE_TYPE (complex_integer_type_node) = integer_type_node;
6304
  layout_type (complex_integer_type_node);
6305
 
6306
  complex_float_type_node = make_node (COMPLEX_TYPE);
6307
  TREE_TYPE (complex_float_type_node) = float_type_node;
6308
  layout_type (complex_float_type_node);
6309
 
6310
  complex_double_type_node = make_node (COMPLEX_TYPE);
6311
  TREE_TYPE (complex_double_type_node) = double_type_node;
6312
  layout_type (complex_double_type_node);
6313
 
6314
  complex_long_double_type_node = make_node (COMPLEX_TYPE);
6315
  TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6316
  layout_type (complex_long_double_type_node);
6317
 
6318
  {
6319
    tree t = targetm.build_builtin_va_list ();
6320
 
6321
    /* Many back-ends define record types without setting TYPE_NAME.
6322
       If we copied the record type here, we'd keep the original
6323
       record type without a name.  This breaks name mangling.  So,
6324
       don't copy record types and let c_common_nodes_and_builtins()
6325
       declare the type to be __builtin_va_list.  */
6326
    if (TREE_CODE (t) != RECORD_TYPE)
6327
      t = build_variant_type_copy (t);
6328
 
6329
    va_list_type_node = t;
6330
  }
6331
}
6332
 
6333
/* A subroutine of build_common_builtin_nodes.  Define a builtin function.  */
6334
 
6335
static void
6336
local_define_builtin (const char *name, tree type, enum built_in_function code,
6337
                      const char *library_name, int ecf_flags)
6338
{
6339
  tree decl;
6340
 
6341
  decl = lang_hooks.builtin_function (name, type, code, BUILT_IN_NORMAL,
6342
                                      library_name, NULL_TREE);
6343
  if (ecf_flags & ECF_CONST)
6344
    TREE_READONLY (decl) = 1;
6345
  if (ecf_flags & ECF_PURE)
6346
    DECL_IS_PURE (decl) = 1;
6347
  if (ecf_flags & ECF_NORETURN)
6348
    TREE_THIS_VOLATILE (decl) = 1;
6349
  if (ecf_flags & ECF_NOTHROW)
6350
    TREE_NOTHROW (decl) = 1;
6351
  if (ecf_flags & ECF_MALLOC)
6352
    DECL_IS_MALLOC (decl) = 1;
6353
 
6354
  built_in_decls[code] = decl;
6355
  implicit_built_in_decls[code] = decl;
6356
}
6357
 
6358
/* Call this function after instantiating all builtins that the language
6359
   front end cares about.  This will build the rest of the builtins that
6360
   are relied upon by the tree optimizers and the middle-end.  */
6361
 
6362
void
6363
build_common_builtin_nodes (void)
6364
{
6365
  tree tmp, ftype;
6366
 
6367
  if (built_in_decls[BUILT_IN_MEMCPY] == NULL
6368
      || built_in_decls[BUILT_IN_MEMMOVE] == NULL)
6369
    {
6370
      tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
6371
      tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
6372
      tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
6373
      ftype = build_function_type (ptr_type_node, tmp);
6374
 
6375
      if (built_in_decls[BUILT_IN_MEMCPY] == NULL)
6376
        local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
6377
                              "memcpy", ECF_NOTHROW);
6378
      if (built_in_decls[BUILT_IN_MEMMOVE] == NULL)
6379
        local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
6380
                              "memmove", ECF_NOTHROW);
6381
    }
6382
 
6383
  if (built_in_decls[BUILT_IN_MEMCMP] == NULL)
6384
    {
6385
      tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
6386
      tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
6387
      tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
6388
      ftype = build_function_type (integer_type_node, tmp);
6389
      local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
6390
                            "memcmp", ECF_PURE | ECF_NOTHROW);
6391
    }
6392
 
6393
  if (built_in_decls[BUILT_IN_MEMSET] == NULL)
6394
    {
6395
      tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
6396
      tmp = tree_cons (NULL_TREE, integer_type_node, tmp);
6397
      tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
6398
      ftype = build_function_type (ptr_type_node, tmp);
6399
      local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
6400
                            "memset", ECF_NOTHROW);
6401
    }
6402
 
6403
  if (built_in_decls[BUILT_IN_ALLOCA] == NULL)
6404
    {
6405
      tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
6406
      ftype = build_function_type (ptr_type_node, tmp);
6407
      local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
6408
                            "alloca", ECF_NOTHROW | ECF_MALLOC);
6409
    }
6410
 
6411
  tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6412
  tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
6413
  tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
6414
  ftype = build_function_type (void_type_node, tmp);
6415
  local_define_builtin ("__builtin_init_trampoline", ftype,
6416
                        BUILT_IN_INIT_TRAMPOLINE,
6417
                        "__builtin_init_trampoline", ECF_NOTHROW);
6418
 
6419
  tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6420
  ftype = build_function_type (ptr_type_node, tmp);
6421
  local_define_builtin ("__builtin_adjust_trampoline", ftype,
6422
                        BUILT_IN_ADJUST_TRAMPOLINE,
6423
                        "__builtin_adjust_trampoline",
6424
                        ECF_CONST | ECF_NOTHROW);
6425
 
6426
  tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6427
  tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
6428
  ftype = build_function_type (void_type_node, tmp);
6429
  local_define_builtin ("__builtin_nonlocal_goto", ftype,
6430
                        BUILT_IN_NONLOCAL_GOTO,
6431
                        "__builtin_nonlocal_goto",
6432
                        ECF_NORETURN | ECF_NOTHROW);
6433
 
6434
  ftype = build_function_type (ptr_type_node, void_list_node);
6435
  local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
6436
                        "__builtin_stack_save", ECF_NOTHROW);
6437
 
6438
  tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6439
  ftype = build_function_type (void_type_node, tmp);
6440
  local_define_builtin ("__builtin_stack_restore", ftype,
6441
                        BUILT_IN_STACK_RESTORE,
6442
                        "__builtin_stack_restore", ECF_NOTHROW);
6443
 
6444
  ftype = build_function_type (void_type_node, void_list_node);
6445
  local_define_builtin ("__builtin_profile_func_enter", ftype,
6446
                        BUILT_IN_PROFILE_FUNC_ENTER, "profile_func_enter", 0);
6447
  local_define_builtin ("__builtin_profile_func_exit", ftype,
6448
                        BUILT_IN_PROFILE_FUNC_EXIT, "profile_func_exit", 0);
6449
 
6450
  /* Complex multiplication and division.  These are handled as builtins
6451
     rather than optabs because emit_library_call_value doesn't support
6452
     complex.  Further, we can do slightly better with folding these
6453
     beasties if the real and complex parts of the arguments are separate.  */
6454
  {
6455
    enum machine_mode mode;
6456
 
6457
    for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
6458
      {
6459
        char mode_name_buf[4], *q;
6460
        const char *p;
6461
        enum built_in_function mcode, dcode;
6462
        tree type, inner_type;
6463
 
6464
        type = lang_hooks.types.type_for_mode (mode, 0);
6465
        if (type == NULL)
6466
          continue;
6467
        inner_type = TREE_TYPE (type);
6468
 
6469
        tmp = tree_cons (NULL_TREE, inner_type, void_list_node);
6470
        tmp = tree_cons (NULL_TREE, inner_type, tmp);
6471
        tmp = tree_cons (NULL_TREE, inner_type, tmp);
6472
        tmp = tree_cons (NULL_TREE, inner_type, tmp);
6473
        ftype = build_function_type (type, tmp);
6474
 
6475
        mcode = BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT;
6476
        dcode = BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT;
6477
 
6478
        for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
6479
          *q = TOLOWER (*p);
6480
        *q = '\0';
6481
 
6482
        built_in_names[mcode] = concat ("__mul", mode_name_buf, "3", NULL);
6483
        local_define_builtin (built_in_names[mcode], ftype, mcode,
6484
                              built_in_names[mcode], ECF_CONST | ECF_NOTHROW);
6485
 
6486
        built_in_names[dcode] = concat ("__div", mode_name_buf, "3", NULL);
6487
        local_define_builtin (built_in_names[dcode], ftype, dcode,
6488
                              built_in_names[dcode], ECF_CONST | ECF_NOTHROW);
6489
      }
6490
  }
6491
}
6492
 
6493
/* HACK.  GROSS.  This is absolutely disgusting.  I wish there was a
6494
   better way.
6495
 
6496
   If we requested a pointer to a vector, build up the pointers that
6497
   we stripped off while looking for the inner type.  Similarly for
6498
   return values from functions.
6499
 
6500
   The argument TYPE is the top of the chain, and BOTTOM is the
6501
   new type which we will point to.  */
6502
 
6503
tree
6504
reconstruct_complex_type (tree type, tree bottom)
6505
{
6506
  tree inner, outer;
6507
 
6508
  if (POINTER_TYPE_P (type))
6509
    {
6510
      inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
6511
      outer = build_pointer_type (inner);
6512
    }
6513
  else if (TREE_CODE (type) == ARRAY_TYPE)
6514
    {
6515
      inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
6516
      outer = build_array_type (inner, TYPE_DOMAIN (type));
6517
    }
6518
  else if (TREE_CODE (type) == FUNCTION_TYPE)
6519
    {
6520
      inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
6521
      outer = build_function_type (inner, TYPE_ARG_TYPES (type));
6522
    }
6523
  else if (TREE_CODE (type) == METHOD_TYPE)
6524
    {
6525
      tree argtypes;
6526
      inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
6527
      /* The build_method_type_directly() routine prepends 'this' to argument list,
6528
         so we must compensate by getting rid of it.  */
6529
      argtypes = TYPE_ARG_TYPES (type);
6530
      outer = build_method_type_directly (TYPE_METHOD_BASETYPE (type),
6531
                                          inner,
6532
                                          TYPE_ARG_TYPES (type));
6533
      TYPE_ARG_TYPES (outer) = argtypes;
6534
    }
6535
  else
6536
    return bottom;
6537
 
6538
  TYPE_READONLY (outer) = TYPE_READONLY (type);
6539
  TYPE_VOLATILE (outer) = TYPE_VOLATILE (type);
6540
 
6541
  return outer;
6542
}
6543
 
6544
/* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
6545
   the inner type.  */
6546
tree
6547
build_vector_type_for_mode (tree innertype, enum machine_mode mode)
6548
{
6549
  int nunits;
6550
 
6551
  switch (GET_MODE_CLASS (mode))
6552
    {
6553
    case MODE_VECTOR_INT:
6554
    case MODE_VECTOR_FLOAT:
6555
      nunits = GET_MODE_NUNITS (mode);
6556
      break;
6557
 
6558
    case MODE_INT:
6559
      /* Check that there are no leftover bits.  */
6560
      gcc_assert (GET_MODE_BITSIZE (mode)
6561
                  % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
6562
 
6563
      nunits = GET_MODE_BITSIZE (mode)
6564
               / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
6565
      break;
6566
 
6567
    default:
6568
      gcc_unreachable ();
6569
    }
6570
 
6571
  return make_vector_type (innertype, nunits, mode);
6572
}
6573
 
6574
/* Similarly, but takes the inner type and number of units, which must be
6575
   a power of two.  */
6576
 
6577
tree
6578
build_vector_type (tree innertype, int nunits)
6579
{
6580
  return make_vector_type (innertype, nunits, VOIDmode);
6581
}
6582
 
6583
/* Build RESX_EXPR with given REGION_NUMBER.  */
6584
tree
6585
build_resx (int region_number)
6586
{
6587
  tree t;
6588
  t = build1 (RESX_EXPR, void_type_node,
6589
              build_int_cst (NULL_TREE, region_number));
6590
  return t;
6591
}
6592
 
6593
/* Given an initializer INIT, return TRUE if INIT is zero or some
6594
   aggregate of zeros.  Otherwise return FALSE.  */
6595
bool
6596
initializer_zerop (tree init)
6597
{
6598
  tree elt;
6599
 
6600
  STRIP_NOPS (init);
6601
 
6602
  switch (TREE_CODE (init))
6603
    {
6604
    case INTEGER_CST:
6605
      return integer_zerop (init);
6606
 
6607
    case REAL_CST:
6608
      /* ??? Note that this is not correct for C4X float formats.  There,
6609
         a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
6610
         negative exponent.  */
6611
      return real_zerop (init)
6612
        && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
6613
 
6614
    case COMPLEX_CST:
6615
      return integer_zerop (init)
6616
        || (real_zerop (init)
6617
            && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
6618
            && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
6619
 
6620
    case VECTOR_CST:
6621
      for (elt = TREE_VECTOR_CST_ELTS (init); elt; elt = TREE_CHAIN (elt))
6622
        if (!initializer_zerop (TREE_VALUE (elt)))
6623
          return false;
6624
      return true;
6625
 
6626
    case CONSTRUCTOR:
6627
      {
6628
        unsigned HOST_WIDE_INT idx;
6629
 
6630
        FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
6631
          if (!initializer_zerop (elt))
6632
            return false;
6633
        return true;
6634
      }
6635
 
6636
    default:
6637
      return false;
6638
    }
6639
}
6640
 
6641
void
6642
add_var_to_bind_expr (tree bind_expr, tree var)
6643
{
6644
  BIND_EXPR_VARS (bind_expr)
6645
    = chainon (BIND_EXPR_VARS (bind_expr), var);
6646
  if (BIND_EXPR_BLOCK (bind_expr))
6647
    BLOCK_VARS (BIND_EXPR_BLOCK (bind_expr))
6648
      = BIND_EXPR_VARS (bind_expr);
6649
}
6650
 
6651
/* Build an empty statement.  */
6652
 
6653
tree
6654
build_empty_stmt (void)
6655
{
6656
  return build1 (NOP_EXPR, void_type_node, size_zero_node);
6657
}
6658
 
6659
 
6660
/* Returns true if it is possible to prove that the index of
6661
   an array access REF (an ARRAY_REF expression) falls into the
6662
   array bounds.  */
6663
 
6664
bool
6665
in_array_bounds_p (tree ref)
6666
{
6667
  tree idx = TREE_OPERAND (ref, 1);
6668
  tree min, max;
6669
 
6670
  if (TREE_CODE (idx) != INTEGER_CST)
6671
    return false;
6672
 
6673
  min = array_ref_low_bound (ref);
6674
  max = array_ref_up_bound (ref);
6675
  if (!min
6676
      || !max
6677
      || TREE_CODE (min) != INTEGER_CST
6678
      || TREE_CODE (max) != INTEGER_CST)
6679
    return false;
6680
 
6681
  if (tree_int_cst_lt (idx, min)
6682
      || tree_int_cst_lt (max, idx))
6683
    return false;
6684
 
6685
  return true;
6686
}
6687
 
6688
/* Return true if T (assumed to be a DECL) is a global variable.  */
6689
 
6690
bool
6691
is_global_var (tree t)
6692
{
6693
  return (TREE_STATIC (t) || DECL_EXTERNAL (t));
6694
}
6695
 
6696
/* Return true if T (assumed to be a DECL) must be assigned a memory
6697
   location.  */
6698
 
6699
bool
6700
needs_to_live_in_memory (tree t)
6701
{
6702
  return (TREE_ADDRESSABLE (t)
6703
          || is_global_var (t)
6704
          || (TREE_CODE (t) == RESULT_DECL
6705
              && aggregate_value_p (t, current_function_decl)));
6706
}
6707
 
6708
/* There are situations in which a language considers record types
6709
   compatible which have different field lists.  Decide if two fields
6710
   are compatible.  It is assumed that the parent records are compatible.  */
6711
 
6712
bool
6713
fields_compatible_p (tree f1, tree f2)
6714
{
6715
  if (!operand_equal_p (DECL_FIELD_BIT_OFFSET (f1),
6716
                        DECL_FIELD_BIT_OFFSET (f2), OEP_ONLY_CONST))
6717
    return false;
6718
 
6719
  if (!operand_equal_p (DECL_FIELD_OFFSET (f1),
6720
                        DECL_FIELD_OFFSET (f2), OEP_ONLY_CONST))
6721
    return false;
6722
 
6723
  if (!lang_hooks.types_compatible_p (TREE_TYPE (f1), TREE_TYPE (f2)))
6724
    return false;
6725
 
6726
  return true;
6727
}
6728
 
6729
/* Locate within RECORD a field that is compatible with ORIG_FIELD.  */
6730
 
6731
tree
6732
find_compatible_field (tree record, tree orig_field)
6733
{
6734
  tree f;
6735
 
6736
  for (f = TYPE_FIELDS (record); f ; f = TREE_CHAIN (f))
6737
    if (TREE_CODE (f) == FIELD_DECL
6738
        && fields_compatible_p (f, orig_field))
6739
      return f;
6740
 
6741
  /* ??? Why isn't this on the main fields list?  */
6742
  f = TYPE_VFIELD (record);
6743
  if (f && TREE_CODE (f) == FIELD_DECL
6744
      && fields_compatible_p (f, orig_field))
6745
    return f;
6746
 
6747
  /* ??? We should abort here, but Java appears to do Bad Things
6748
     with inherited fields.  */
6749
  return orig_field;
6750
}
6751
 
6752
/* Return value of a constant X.  */
6753
 
6754
HOST_WIDE_INT
6755
int_cst_value (tree x)
6756
{
6757
  unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
6758
  unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
6759
  bool negative = ((val >> (bits - 1)) & 1) != 0;
6760
 
6761
  gcc_assert (bits <= HOST_BITS_PER_WIDE_INT);
6762
 
6763
  if (negative)
6764
    val |= (~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1;
6765
  else
6766
    val &= ~((~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1);
6767
 
6768
  return val;
6769
}
6770
 
6771
/* Returns the greatest common divisor of A and B, which must be
6772
   INTEGER_CSTs.  */
6773
 
6774
tree
6775
tree_fold_gcd (tree a, tree b)
6776
{
6777
  tree a_mod_b;
6778
  tree type = TREE_TYPE (a);
6779
 
6780
  gcc_assert (TREE_CODE (a) == INTEGER_CST);
6781
  gcc_assert (TREE_CODE (b) == INTEGER_CST);
6782
 
6783
  if (integer_zerop (a))
6784
    return b;
6785
 
6786
  if (integer_zerop (b))
6787
    return a;
6788
 
6789
  if (tree_int_cst_sgn (a) == -1)
6790
    a = fold_build2 (MULT_EXPR, type, a,
6791
                     convert (type, integer_minus_one_node));
6792
 
6793
  if (tree_int_cst_sgn (b) == -1)
6794
    b = fold_build2 (MULT_EXPR, type, b,
6795
                     convert (type, integer_minus_one_node));
6796
 
6797
  while (1)
6798
    {
6799
      a_mod_b = fold_build2 (FLOOR_MOD_EXPR, type, a, b);
6800
 
6801
      if (!TREE_INT_CST_LOW (a_mod_b)
6802
          && !TREE_INT_CST_HIGH (a_mod_b))
6803
        return b;
6804
 
6805
      a = b;
6806
      b = a_mod_b;
6807
    }
6808
}
6809
 
6810
/* Returns unsigned variant of TYPE.  */
6811
 
6812
tree
6813
unsigned_type_for (tree type)
6814
{
6815
  if (POINTER_TYPE_P (type))
6816
    return size_type_node;
6817
  return lang_hooks.types.unsigned_type (type);
6818
}
6819
 
6820
/* Returns signed variant of TYPE.  */
6821
 
6822
tree
6823
signed_type_for (tree type)
6824
{
6825
  return lang_hooks.types.signed_type (type);
6826
}
6827
 
6828
/* Returns the largest value obtainable by casting something in INNER type to
6829
   OUTER type.  */
6830
 
6831
tree
6832
upper_bound_in_type (tree outer, tree inner)
6833
{
6834
  unsigned HOST_WIDE_INT lo, hi;
6835
  unsigned int det = 0;
6836
  unsigned oprec = TYPE_PRECISION (outer);
6837
  unsigned iprec = TYPE_PRECISION (inner);
6838
  unsigned prec;
6839
 
6840
  /* Compute a unique number for every combination.  */
6841
  det |= (oprec > iprec) ? 4 : 0;
6842
  det |= TYPE_UNSIGNED (outer) ? 2 : 0;
6843
  det |= TYPE_UNSIGNED (inner) ? 1 : 0;
6844
 
6845
  /* Determine the exponent to use.  */
6846
  switch (det)
6847
    {
6848
    case 0:
6849
    case 1:
6850
      /* oprec <= iprec, outer: signed, inner: don't care.  */
6851
      prec = oprec - 1;
6852
      break;
6853
    case 2:
6854
    case 3:
6855
      /* oprec <= iprec, outer: unsigned, inner: don't care.  */
6856
      prec = oprec;
6857
      break;
6858
    case 4:
6859
      /* oprec > iprec, outer: signed, inner: signed.  */
6860
      prec = iprec - 1;
6861
      break;
6862
    case 5:
6863
      /* oprec > iprec, outer: signed, inner: unsigned.  */
6864
      prec = iprec;
6865
      break;
6866
    case 6:
6867
      /* oprec > iprec, outer: unsigned, inner: signed.  */
6868
      prec = oprec;
6869
      break;
6870
    case 7:
6871
      /* oprec > iprec, outer: unsigned, inner: unsigned.  */
6872
      prec = iprec;
6873
      break;
6874
    default:
6875
      gcc_unreachable ();
6876
    }
6877
 
6878
  /* Compute 2^^prec - 1.  */
6879
  if (prec <= HOST_BITS_PER_WIDE_INT)
6880
    {
6881
      hi = 0;
6882
      lo = ((~(unsigned HOST_WIDE_INT) 0)
6883
            >> (HOST_BITS_PER_WIDE_INT - prec));
6884
    }
6885
  else
6886
    {
6887
      hi = ((~(unsigned HOST_WIDE_INT) 0)
6888
            >> (2 * HOST_BITS_PER_WIDE_INT - prec));
6889
      lo = ~(unsigned HOST_WIDE_INT) 0;
6890
    }
6891
 
6892
  return build_int_cst_wide (outer, lo, hi);
6893
}
6894
 
6895
/* Returns the smallest value obtainable by casting something in INNER type to
6896
   OUTER type.  */
6897
 
6898
tree
6899
lower_bound_in_type (tree outer, tree inner)
6900
{
6901
  unsigned HOST_WIDE_INT lo, hi;
6902
  unsigned oprec = TYPE_PRECISION (outer);
6903
  unsigned iprec = TYPE_PRECISION (inner);
6904
 
6905
  /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
6906
     and obtain 0.  */
6907
  if (TYPE_UNSIGNED (outer)
6908
      /* If we are widening something of an unsigned type, OUTER type
6909
         contains all values of INNER type.  In particular, both INNER
6910
         and OUTER types have zero in common.  */
6911
      || (oprec > iprec && TYPE_UNSIGNED (inner)))
6912
    lo = hi = 0;
6913
  else
6914
    {
6915
      /* If we are widening a signed type to another signed type, we
6916
         want to obtain -2^^(iprec-1).  If we are keeping the
6917
         precision or narrowing to a signed type, we want to obtain
6918
         -2^(oprec-1).  */
6919
      unsigned prec = oprec > iprec ? iprec : oprec;
6920
 
6921
      if (prec <= HOST_BITS_PER_WIDE_INT)
6922
        {
6923
          hi = ~(unsigned HOST_WIDE_INT) 0;
6924
          lo = (~(unsigned HOST_WIDE_INT) 0) << (prec - 1);
6925
        }
6926
      else
6927
        {
6928
          hi = ((~(unsigned HOST_WIDE_INT) 0)
6929
                << (prec - HOST_BITS_PER_WIDE_INT - 1));
6930
          lo = 0;
6931
        }
6932
    }
6933
 
6934
  return build_int_cst_wide (outer, lo, hi);
6935
}
6936
 
6937
/* Return nonzero if two operands that are suitable for PHI nodes are
6938
   necessarily equal.  Specifically, both ARG0 and ARG1 must be either
6939
   SSA_NAME or invariant.  Note that this is strictly an optimization.
6940
   That is, callers of this function can directly call operand_equal_p
6941
   and get the same result, only slower.  */
6942
 
6943
int
6944
operand_equal_for_phi_arg_p (tree arg0, tree arg1)
6945
{
6946
  if (arg0 == arg1)
6947
    return 1;
6948
  if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
6949
    return 0;
6950
  return operand_equal_p (arg0, arg1, 0);
6951
}
6952
 
6953
/* Returns number of zeros at the end of binary representation of X.
6954
 
6955
   ??? Use ffs if available?  */
6956
 
6957
tree
6958
num_ending_zeros (tree x)
6959
{
6960
  unsigned HOST_WIDE_INT fr, nfr;
6961
  unsigned num, abits;
6962
  tree type = TREE_TYPE (x);
6963
 
6964
  if (TREE_INT_CST_LOW (x) == 0)
6965
    {
6966
      num = HOST_BITS_PER_WIDE_INT;
6967
      fr = TREE_INT_CST_HIGH (x);
6968
    }
6969
  else
6970
    {
6971
      num = 0;
6972
      fr = TREE_INT_CST_LOW (x);
6973
    }
6974
 
6975
  for (abits = HOST_BITS_PER_WIDE_INT / 2; abits; abits /= 2)
6976
    {
6977
      nfr = fr >> abits;
6978
      if (nfr << abits == fr)
6979
        {
6980
          num += abits;
6981
          fr = nfr;
6982
        }
6983
    }
6984
 
6985
  if (num > TYPE_PRECISION (type))
6986
    num = TYPE_PRECISION (type);
6987
 
6988
  return build_int_cst_type (type, num);
6989
}
6990
 
6991
 
6992
#define WALK_SUBTREE(NODE)                              \
6993
  do                                                    \
6994
    {                                                   \
6995
      result = walk_tree (&(NODE), func, data, pset);   \
6996
      if (result)                                       \
6997
        return result;                                  \
6998
    }                                                   \
6999
  while (0)
7000
 
7001
/* This is a subroutine of walk_tree that walks field of TYPE that are to
7002
   be walked whenever a type is seen in the tree.  Rest of operands and return
7003
   value are as for walk_tree.  */
7004
 
7005
static tree
7006
walk_type_fields (tree type, walk_tree_fn func, void *data,
7007
                  struct pointer_set_t *pset)
7008
{
7009
  tree result = NULL_TREE;
7010
 
7011
  switch (TREE_CODE (type))
7012
    {
7013
    case POINTER_TYPE:
7014
    case REFERENCE_TYPE:
7015
      /* We have to worry about mutually recursive pointers.  These can't
7016
         be written in C.  They can in Ada.  It's pathological, but
7017
         there's an ACATS test (c38102a) that checks it.  Deal with this
7018
         by checking if we're pointing to another pointer, that one
7019
         points to another pointer, that one does too, and we have no htab.
7020
         If so, get a hash table.  We check three levels deep to avoid
7021
         the cost of the hash table if we don't need one.  */
7022
      if (POINTER_TYPE_P (TREE_TYPE (type))
7023
          && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
7024
          && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
7025
          && !pset)
7026
        {
7027
          result = walk_tree_without_duplicates (&TREE_TYPE (type),
7028
                                                 func, data);
7029
          if (result)
7030
            return result;
7031
 
7032
          break;
7033
        }
7034
 
7035
      /* ... fall through ... */
7036
 
7037
    case COMPLEX_TYPE:
7038
      WALK_SUBTREE (TREE_TYPE (type));
7039
      break;
7040
 
7041
    case METHOD_TYPE:
7042
      WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
7043
 
7044
      /* Fall through.  */
7045
 
7046
    case FUNCTION_TYPE:
7047
      WALK_SUBTREE (TREE_TYPE (type));
7048
      {
7049
        tree arg;
7050
 
7051
        /* We never want to walk into default arguments.  */
7052
        for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
7053
          WALK_SUBTREE (TREE_VALUE (arg));
7054
      }
7055
      break;
7056
 
7057
    case ARRAY_TYPE:
7058
      /* Don't follow this nodes's type if a pointer for fear that we'll
7059
         have infinite recursion.  Those types are uninteresting anyway.  */
7060
      if (!POINTER_TYPE_P (TREE_TYPE (type))
7061
          && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE)
7062
        WALK_SUBTREE (TREE_TYPE (type));
7063
      WALK_SUBTREE (TYPE_DOMAIN (type));
7064
      break;
7065
 
7066
    case BOOLEAN_TYPE:
7067
    case ENUMERAL_TYPE:
7068
    case INTEGER_TYPE:
7069
    case CHAR_TYPE:
7070
    case REAL_TYPE:
7071
      WALK_SUBTREE (TYPE_MIN_VALUE (type));
7072
      WALK_SUBTREE (TYPE_MAX_VALUE (type));
7073
      break;
7074
 
7075
    case OFFSET_TYPE:
7076
      WALK_SUBTREE (TREE_TYPE (type));
7077
      WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
7078
      break;
7079
 
7080
    default:
7081
      break;
7082
    }
7083
 
7084
  return NULL_TREE;
7085
}
7086
 
7087
/* Apply FUNC to all the sub-trees of TP in a pre-order traversal.  FUNC is
7088
   called with the DATA and the address of each sub-tree.  If FUNC returns a
7089
   non-NULL value, the traversal is stopped, and the value returned by FUNC
7090
   is returned.  If PSET is non-NULL it is used to record the nodes visited,
7091
   and to avoid visiting a node more than once.  */
7092
 
7093
tree
7094
walk_tree (tree *tp, walk_tree_fn func, void *data, struct pointer_set_t *pset)
7095
{
7096
  enum tree_code code;
7097
  int walk_subtrees;
7098
  tree result;
7099
 
7100
#define WALK_SUBTREE_TAIL(NODE)                         \
7101
  do                                                    \
7102
    {                                                   \
7103
       tp = & (NODE);                                   \
7104
       goto tail_recurse;                               \
7105
    }                                                   \
7106
  while (0)
7107
 
7108
 tail_recurse:
7109
  /* Skip empty subtrees.  */
7110
  if (!*tp)
7111
    return NULL_TREE;
7112
 
7113
  /* Don't walk the same tree twice, if the user has requested
7114
     that we avoid doing so.  */
7115
  if (pset && pointer_set_insert (pset, *tp))
7116
    return NULL_TREE;
7117
 
7118
  /* Call the function.  */
7119
  walk_subtrees = 1;
7120
  result = (*func) (tp, &walk_subtrees, data);
7121
 
7122
  /* If we found something, return it.  */
7123
  if (result)
7124
    return result;
7125
 
7126
  code = TREE_CODE (*tp);
7127
 
7128
  /* Even if we didn't, FUNC may have decided that there was nothing
7129
     interesting below this point in the tree.  */
7130
  if (!walk_subtrees)
7131
    {
7132
      if (code == TREE_LIST)
7133
        /* But we still need to check our siblings.  */
7134
        WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
7135
      else
7136
        return NULL_TREE;
7137
    }
7138
 
7139
  result = lang_hooks.tree_inlining.walk_subtrees (tp, &walk_subtrees, func,
7140
                                                   data, pset);
7141
  if (result || ! walk_subtrees)
7142
    return result;
7143
 
7144
  /* If this is a DECL_EXPR, walk into various fields of the type that it's
7145
     defining.  We only want to walk into these fields of a type in this
7146
     case.  Note that decls get walked as part of the processing of a
7147
     BIND_EXPR.
7148
 
7149
     ??? Precisely which fields of types that we are supposed to walk in
7150
     this case vs. the normal case aren't well defined.  */
7151
  if (code == DECL_EXPR
7152
      && TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL
7153
      && TREE_CODE (TREE_TYPE (DECL_EXPR_DECL (*tp))) != ERROR_MARK)
7154
    {
7155
      tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
7156
 
7157
      /* Call the function for the type.  See if it returns anything or
7158
         doesn't want us to continue.  If we are to continue, walk both
7159
         the normal fields and those for the declaration case.  */
7160
      result = (*func) (type_p, &walk_subtrees, data);
7161
      if (result || !walk_subtrees)
7162
        return NULL_TREE;
7163
 
7164
      result = walk_type_fields (*type_p, func, data, pset);
7165
      if (result)
7166
        return result;
7167
 
7168
      WALK_SUBTREE (TYPE_SIZE (*type_p));
7169
      WALK_SUBTREE (TYPE_SIZE_UNIT (*type_p));
7170
 
7171
      /* If this is a record type, also walk the fields.  */
7172
      if (TREE_CODE (*type_p) == RECORD_TYPE
7173
          || TREE_CODE (*type_p) == UNION_TYPE
7174
          || TREE_CODE (*type_p) == QUAL_UNION_TYPE)
7175
        {
7176
          tree field;
7177
 
7178
          for (field = TYPE_FIELDS (*type_p); field;
7179
               field = TREE_CHAIN (field))
7180
            {
7181
              /* We'd like to look at the type of the field, but we can easily
7182
                 get infinite recursion.  So assume it's pointed to elsewhere
7183
                 in the tree.  Also, ignore things that aren't fields.  */
7184
              if (TREE_CODE (field) != FIELD_DECL)
7185
                continue;
7186
 
7187
              WALK_SUBTREE (DECL_FIELD_OFFSET (field));
7188
              WALK_SUBTREE (DECL_SIZE (field));
7189
              WALK_SUBTREE (DECL_SIZE_UNIT (field));
7190
              if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
7191
                WALK_SUBTREE (DECL_QUALIFIER (field));
7192
            }
7193
        }
7194
    }
7195
 
7196
  else if (code != SAVE_EXPR
7197
           && code != BIND_EXPR
7198
           && IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
7199
    {
7200
      int i, len;
7201
 
7202
      /* Walk over all the sub-trees of this operand.  */
7203
      len = TREE_CODE_LENGTH (code);
7204
      /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
7205
         But, we only want to walk once.  */
7206
      if (code == TARGET_EXPR
7207
          && TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1))
7208
        --len;
7209
 
7210
      /* Go through the subtrees.  We need to do this in forward order so
7211
         that the scope of a FOR_EXPR is handled properly.  */
7212
#ifdef DEBUG_WALK_TREE
7213
      for (i = 0; i < len; ++i)
7214
        WALK_SUBTREE (TREE_OPERAND (*tp, i));
7215
#else
7216
      for (i = 0; i < len - 1; ++i)
7217
        WALK_SUBTREE (TREE_OPERAND (*tp, i));
7218
 
7219
      if (len)
7220
        {
7221
          /* The common case is that we may tail recurse here.  */
7222
          if (code != BIND_EXPR
7223
              && !TREE_CHAIN (*tp))
7224
            WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
7225
          else
7226
            WALK_SUBTREE (TREE_OPERAND (*tp, len - 1));
7227
        }
7228
#endif
7229
    }
7230
 
7231
  /* If this is a type, walk the needed fields in the type.  */
7232
  else if (TYPE_P (*tp))
7233
    {
7234
      result = walk_type_fields (*tp, func, data, pset);
7235
      if (result)
7236
        return result;
7237
    }
7238
  else
7239
    {
7240
      /* Not one of the easy cases.  We must explicitly go through the
7241
         children.  */
7242
      switch (code)
7243
        {
7244
        case ERROR_MARK:
7245
        case IDENTIFIER_NODE:
7246
        case INTEGER_CST:
7247
        case REAL_CST:
7248
        case VECTOR_CST:
7249
        case STRING_CST:
7250
        case BLOCK:
7251
        case PLACEHOLDER_EXPR:
7252
        case SSA_NAME:
7253
        case FIELD_DECL:
7254
        case RESULT_DECL:
7255
          /* None of these have subtrees other than those already walked
7256
             above.  */
7257
          break;
7258
 
7259
        case TREE_LIST:
7260
          WALK_SUBTREE (TREE_VALUE (*tp));
7261
          WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
7262
          break;
7263
 
7264
        case TREE_VEC:
7265
          {
7266
            int len = TREE_VEC_LENGTH (*tp);
7267
 
7268
            if (len == 0)
7269
              break;
7270
 
7271
            /* Walk all elements but the first.  */
7272
            while (--len)
7273
              WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
7274
 
7275
            /* Now walk the first one as a tail call.  */
7276
            WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
7277
          }
7278
 
7279
        case COMPLEX_CST:
7280
          WALK_SUBTREE (TREE_REALPART (*tp));
7281
          WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
7282
 
7283
        case CONSTRUCTOR:
7284
          {
7285
            unsigned HOST_WIDE_INT idx;
7286
            constructor_elt *ce;
7287
 
7288
            for (idx = 0;
7289
                 VEC_iterate(constructor_elt, CONSTRUCTOR_ELTS (*tp), idx, ce);
7290
                 idx++)
7291
              WALK_SUBTREE (ce->value);
7292
          }
7293
          break;
7294
 
7295
        case SAVE_EXPR:
7296
          WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
7297
 
7298
        case BIND_EXPR:
7299
          {
7300
            tree decl;
7301
            for (decl = BIND_EXPR_VARS (*tp); decl; decl = TREE_CHAIN (decl))
7302
              {
7303
                /* Walk the DECL_INITIAL and DECL_SIZE.  We don't want to walk
7304
                   into declarations that are just mentioned, rather than
7305
                   declared; they don't really belong to this part of the tree.
7306
                   And, we can see cycles: the initializer for a declaration
7307
                   can refer to the declaration itself.  */
7308
                WALK_SUBTREE (DECL_INITIAL (decl));
7309
                WALK_SUBTREE (DECL_SIZE (decl));
7310
                WALK_SUBTREE (DECL_SIZE_UNIT (decl));
7311
              }
7312
            WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
7313
          }
7314
 
7315
        case STATEMENT_LIST:
7316
          {
7317
            tree_stmt_iterator i;
7318
            for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
7319
              WALK_SUBTREE (*tsi_stmt_ptr (i));
7320
          }
7321
          break;
7322
 
7323
        default:
7324
          /* ??? This could be a language-defined node.  We really should make
7325
             a hook for it, but right now just ignore it.  */
7326
          break;
7327
        }
7328
    }
7329
 
7330
  /* We didn't find what we were looking for.  */
7331
  return NULL_TREE;
7332
 
7333
#undef WALK_SUBTREE_TAIL
7334
}
7335
#undef WALK_SUBTREE
7336
 
7337
/* Like walk_tree, but does not walk duplicate nodes more than once.  */
7338
 
7339
tree
7340
walk_tree_without_duplicates (tree *tp, walk_tree_fn func, void *data)
7341
{
7342
  tree result;
7343
  struct pointer_set_t *pset;
7344
 
7345
  pset = pointer_set_create ();
7346
  result = walk_tree (tp, func, data, pset);
7347
  pointer_set_destroy (pset);
7348
  return result;
7349
}
7350
 
7351
#include "gt-tree.h"

powered by: WebSVN 2.1.0

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