OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [tree.c] - Blame information for rev 165

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

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

powered by: WebSVN 2.1.0

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