tree.h 148 KB
Newer Older
Richard Stallman committed
1
/* Front-end tree definitions for GNU compiler.
2
   Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3
   2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Richard Stallman committed
4

5
This file is part of GCC.
Richard Stallman committed
6

7 8 9 10
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
Richard Stallman committed
11

12 13 14 15
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.
Richard Stallman committed
16 17

You should have received a copy of the GNU General Public License
18 19 20
along with GCC; see the file COPYING.  If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.  */
Richard Stallman committed
21

22 23 24
#ifndef GCC_TREE_H
#define GCC_TREE_H

Richard Stallman committed
25
#include "machmode.h"
26
#include "input.h"
27
#include "statistics.h"
Nathan Sidwell committed
28
#include "vec.h"
Richard Stallman committed
29

30
/* Codes of tree nodes */
Richard Stallman committed
31 32 33 34 35 36

#define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,

enum tree_code {
#include "tree.def"

37
  LAST_AND_UNUSED_TREE_CODE	/* A convenient way to get a value for
38
				   NUM_TREE_CODES.  */
Richard Stallman committed
39 40 41 42
};

#undef DEFTREECODE

43 44
/* Number of language-independent tree codes.  */
#define NUM_TREE_CODES ((int) LAST_AND_UNUSED_TREE_CODE)
Richard Stallman committed
45

46 47 48 49 50 51 52 53
/* Tree code classes.  */

/* Each tree_code has an associated code class represented by a
   TREE_CODE_CLASS.  */

enum tree_code_class {
  tcc_exceptional, /* An exceptional code (fits no category).  */
  tcc_constant,    /* A constant.  */
54
  /* Order of tcc_type and tcc_declaration is important.  */
55 56 57 58 59 60 61 62 63 64 65 66 67 68
  tcc_type,        /* A type object code.  */
  tcc_declaration, /* A declaration (also serving as variable refs).  */
  tcc_reference,   /* A reference to storage.  */
  tcc_comparison,  /* A comparison expression.  */
  tcc_unary,       /* A unary arithmetic expression.  */
  tcc_binary,      /* A binary arithmetic expression.  */
  tcc_statement,   /* A statement expression, which have side effects
		      but usually no interesting value.  */
  tcc_expression   /* Any other expression.  */
};

/* Each tree code class has an associated string representation.
   These must correspond to the tree_code_class entries.  */

69
extern const char *const tree_code_class_strings[];
70 71 72 73 74

/* Returns the string representing CLASS.  */

#define TREE_CODE_CLASS_STRING(CLASS)\
        tree_code_class_strings[(int) (CLASS)]
Richard Stallman committed
75

76
#define MAX_TREE_CODES 256
77
extern const enum tree_code_class tree_code_type[];
78
#define TREE_CODE_CLASS(CODE)	tree_code_type[(int) (CODE)]
Richard Stallman committed
79

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
/* Nonzero if CODE represents an exceptional code.  */

#define EXCEPTIONAL_CLASS_P(CODE)\
	(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_exceptional)

/* Nonzero if CODE represents a constant.  */

#define CONSTANT_CLASS_P(CODE)\
	(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_constant)

/* Nonzero if CODE represents a type.  */

#define TYPE_P(CODE)\
	(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_type)

/* Nonzero if CODE represents a declaration.  */

#define DECL_P(CODE)\
        (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_declaration)

100 101
/* Nonzero if CODE represents a INDIRECT_REF.  Keep these checks in
   ascending code order.  */
102 103
#define INDIRECT_REF_P(CODE)\
  (TREE_CODE (CODE) == INDIRECT_REF \
104 105
   || TREE_CODE (CODE) == ALIGN_INDIRECT_REF \
   || TREE_CODE (CODE) == MISALIGNED_INDIRECT_REF)
106

107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
/* Nonzero if CODE represents a reference.  */

#define REFERENCE_CLASS_P(CODE)\
	(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_reference)

/* Nonzero if CODE represents a comparison.  */

#define COMPARISON_CLASS_P(CODE)\
	(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_comparison)

/* Nonzero if CODE represents a unary arithmetic expression.  */

#define UNARY_CLASS_P(CODE)\
	(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_unary)

/* Nonzero if CODE represents a binary arithmetic expression.  */

#define BINARY_CLASS_P(CODE)\
	(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_binary)

/* Nonzero if CODE represents a statement expression.  */

#define STATEMENT_CLASS_P(CODE)\
	(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_statement)

/* Nonzero if CODE represents any other expression.  */

#define EXPRESSION_CLASS_P(CODE)\
	(TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_expression)

/* Returns nonzero iff CODE represents a type or declaration.  */

#define IS_TYPE_OR_DECL_P(CODE)\
	(TYPE_P (CODE) || DECL_P (CODE))
141

142
/* Returns nonzero iff CLASS is the tree-code class of an
143 144
   expression.  */

145
#define IS_EXPR_CODE_CLASS(CLASS)\
146
	((CLASS) >= tcc_reference && (CLASS) <= tcc_expression)
147 148 149 150

/* Returns nonzero iff NODE is an expression of some kind.  */

#define EXPR_P(NODE) IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (NODE)))
151

Richard Stallman committed
152 153
/* Number of argument-words in each kind of tree-node.  */

154
extern const unsigned char tree_code_length[];
155
#define TREE_CODE_LENGTH(CODE)	tree_code_length[(int) (CODE)]
Richard Stallman committed
156 157 158

/* Names of tree components.  */

159
extern const char *const tree_code_name[];
Nathan Sidwell committed
160

161 162 163 164
/* A vectors of trees.  */
DEF_VEC_P(tree);
DEF_VEC_ALLOC_P(tree,gc);
DEF_VEC_ALLOC_P(tree,heap);
Nathan Sidwell committed
165

Richard Stallman committed
166

167 168
/* Classify which part of the compiler has defined a given builtin function.
   Note that we assume below that this is no more than two bits.  */
169 170 171 172 173 174 175
enum built_in_class
{
  NOT_BUILT_IN = 0,
  BUILT_IN_FRONTEND,
  BUILT_IN_MD,
  BUILT_IN_NORMAL
};
176 177

/* Names for the above.  */
178
extern const char *const built_in_class_names[4];
179

Richard Stallman committed
180 181 182
/* Codes that identify the various built in functions
   so that expand_call can identify them quickly.  */

183
#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) ENUM,
Richard Stallman committed
184 185
enum built_in_function
{
Kaveh R. Ghazi committed
186
#include "builtins.def"
187

188 189 190 191 192 193 194 195 196 197 198 199 200 201
  /* Complex division routines in libgcc.  These are done via builtins
     because emit_library_call_value can't handle complex values.  */
  BUILT_IN_COMPLEX_MUL_MIN,
  BUILT_IN_COMPLEX_MUL_MAX
    = BUILT_IN_COMPLEX_MUL_MIN
      + MAX_MODE_COMPLEX_FLOAT
      - MIN_MODE_COMPLEX_FLOAT,

  BUILT_IN_COMPLEX_DIV_MIN,
  BUILT_IN_COMPLEX_DIV_MAX
    = BUILT_IN_COMPLEX_DIV_MIN
      + MAX_MODE_COMPLEX_FLOAT
      - MIN_MODE_COMPLEX_FLOAT,

202
  /* Upper bound on non-language-specific builtins.  */
203
  END_BUILTINS
Richard Stallman committed
204
};
Kaveh R. Ghazi committed
205
#undef DEF_BUILTIN
206 207

/* Names for the above.  */
208
extern const char * built_in_names[(int) END_BUILTINS];
209

210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
/* Helper macros for math builtins.  */

#define BUILTIN_EXP10_P(FN) \
 ((FN) == BUILT_IN_EXP10 || (FN) == BUILT_IN_EXP10F || (FN) == BUILT_IN_EXP10L \
  || (FN) == BUILT_IN_POW10 || (FN) == BUILT_IN_POW10F || (FN) == BUILT_IN_POW10L)

#define BUILTIN_EXPONENT_P(FN) (BUILTIN_EXP10_P (FN) \
  || (FN) == BUILT_IN_EXP || (FN) == BUILT_IN_EXPF || (FN) == BUILT_IN_EXPL \
  || (FN) == BUILT_IN_EXP2 || (FN) == BUILT_IN_EXP2F || (FN) == BUILT_IN_EXP2L)

#define BUILTIN_SQRT_P(FN) \
 ((FN) == BUILT_IN_SQRT || (FN) == BUILT_IN_SQRTF || (FN) == BUILT_IN_SQRTL)

#define BUILTIN_CBRT_P(FN) \
 ((FN) == BUILT_IN_CBRT || (FN) == BUILT_IN_CBRTF || (FN) == BUILT_IN_CBRTL)

#define BUILTIN_ROOT_P(FN) (BUILTIN_SQRT_P (FN) || BUILTIN_CBRT_P (FN))

228
/* An array of _DECL trees for the above.  */
229
extern GTY(()) tree built_in_decls[(int) END_BUILTINS];
230
extern GTY(()) tree implicit_built_in_decls[(int) END_BUILTINS];
Richard Stallman committed
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250

/* The definition of tree nodes fills the next several pages.  */

/* A tree node can represent a data type, a variable, an expression
   or a statement.  Each node has a TREE_CODE which says what kind of
   thing it represents.  Some common codes are:
   INTEGER_TYPE -- represents a type of integers.
   ARRAY_TYPE -- represents a type of pointer.
   VAR_DECL -- represents a declared variable.
   INTEGER_CST -- represents a constant integer value.
   PLUS_EXPR -- represents a sum (an expression).

   As for the contents of a tree node: there are some fields
   that all nodes share.  Each TREE_CODE has various special-purpose
   fields as well.  The fields of a node are never accessed directly,
   always through accessor macros.  */

/* Every kind of tree node starts with this structure,
   so all nodes have these fields.

251
   See the accessor macros, defined below, for documentation of the
Kazu Hirata committed
252
   fields.  */
253
union tree_ann_d;
Richard Stallman committed
254

255
struct tree_common GTY(())
Richard Stallman committed
256
{
257 258
  tree chain;
  tree type;
259
  union tree_ann_d *ann;
260

261
  ENUM_BITFIELD(tree_code) code : 8;
262

Richard Stallman committed
263 264 265 266 267 268 269
  unsigned side_effects_flag : 1;
  unsigned constant_flag : 1;
  unsigned addressable_flag : 1;
  unsigned volatile_flag : 1;
  unsigned readonly_flag : 1;
  unsigned unsigned_flag : 1;
  unsigned asm_written_flag: 1;
270
  unsigned nowarning_flag : 1;
271

272
  unsigned used_flag : 1;
273
  unsigned nothrow_flag : 1;
Richard Stallman committed
274 275 276 277
  unsigned static_flag : 1;
  unsigned public_flag : 1;
  unsigned private_flag : 1;
  unsigned protected_flag : 1;
278
  unsigned deprecated_flag : 1;
279
  unsigned invariant_flag : 1;
Richard Stallman committed
280 281 282 283 284 285 286 287

  unsigned lang_flag_0 : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;
  unsigned lang_flag_5 : 1;
  unsigned lang_flag_6 : 1;
288
  unsigned visited : 1;
Richard Stallman committed
289 290
};

291 292 293 294 295 296 297
/* The following table lists the uses of each of the above flags and
   for which types of nodes they are defined.  Note that expressions
   include decls.

   addressable_flag:

       TREE_ADDRESSABLE in
298
	   VAR_DECL, FUNCTION_DECL, FIELD_DECL, CONSTRUCTOR, LABEL_DECL,
299 300 301
	   ..._TYPE, IDENTIFIER_NODE.
	   In a STMT_EXPR, it means we want the result of the enclosed
	   expression.
302
       CALL_EXPR_TAILCALL in CALL_EXPR
303 304 305 306

   static_flag:

       TREE_STATIC in
307
           VAR_DECL, FUNCTION_DECL, CONSTRUCTOR, ADDR_EXPR
308
       BINFO_VIRTUAL_P in
309
           TREE_BINFO
310
       TREE_CONSTANT_OVERFLOW in
311
           INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
312 313
       TREE_SYMBOL_REFERENCED in
           IDENTIFIER_NODE
314
       CLEANUP_EH_ONLY in
315
           TARGET_EXPR, WITH_CLEANUP_EXPR
316 317 318
       ASM_INPUT_P in
           ASM_EXPR
       EH_FILTER_MUST_NOT_THROW in EH_FILTER_EXPR
319 320
       TYPE_REF_CAN_ALIAS_ALL in
           POINTER_TYPE, REFERENCE_TYPE
321 322 323 324

   public_flag:

       TREE_OVERFLOW in
325
           INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
326
	   ??? and other expressions?
327
       TREE_PUBLIC in
328
           VAR_DECL or FUNCTION_DECL or IDENTIFIER_NODE
329 330
       ASM_VOLATILE_P in
           ASM_EXPR
331 332
       TYPE_CACHED_VALUES_P in
          ..._TYPE
333 334
       SAVE_EXPR_RESOLVED_P in
	  SAVE_EXPR
335 336 337 338

   private_flag:

       TREE_PRIVATE in
339
           ..._DECL
340 341
       CALL_EXPR_HAS_RETURN_SLOT_ADDR in
           CALL_EXPR
342 343
       DECL_BY_REFERENCE in
           PARM_DECL, RESULT_DECL
344 345 346 347 348

   protected_flag:

       TREE_PROTECTED in
           BLOCK
349
	   ..._DECL
350
       CALL_FROM_THUNK_P in
351
           CALL_EXPR
352 353 354 355 356

   side_effects_flag:

       TREE_SIDE_EFFECTS in
           all expressions
357 358
	   all decls
	   all constants
359

360 361 362
       FORCED_LABEL in
	   LABEL_DECL

363 364 365 366 367 368 369 370 371 372
   volatile_flag:

       TREE_THIS_VOLATILE in
           all expressions
       TYPE_VOLATILE in
           ..._TYPE

   readonly_flag:

       TREE_READONLY in
373
           all expressions
374 375 376 377 378 379 380
       TYPE_READONLY in
           ..._TYPE

   constant_flag:

       TREE_CONSTANT in
           all expressions
381 382
	   all decls
	   all constants
Richard Henderson committed
383 384
       TYPE_SIZES_GIMPLIFIED
           ..._TYPE
385 386 387

   unsigned_flag:

388 389
       TYPE_UNSIGNED in
           all types
390 391 392 393
       DECL_UNSIGNED in
           all decls
       BIT_FIELD_REF_UNSIGNED in
           BIT_FIELD_REF
394 395 396 397 398

   asm_written_flag:

       TREE_ASM_WRITTEN in
           VAR_DECL, FUNCTION_DECL, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE
399
	   BLOCK, SSA_NAME
400 401 402 403 404 405

   used_flag:

       TREE_USED in
           expressions, IDENTIFIER_NODE

406
   nothrow_flag:
407

408 409
       TREE_NOTHROW in
           CALL_EXPR, FUNCTION_DECL
410

411 412 413
       TYPE_ALIGN_OK in
	   ..._TYPE

414
       TREE_THIS_NOTRAP in
415
          (ALIGN/MISALIGNED_)INDIRECT_REF, ARRAY_REF, ARRAY_RANGE_REF
416

417 418 419 420
   deprecated_flag:

	TREE_DEPRECATED in
	   ..._DECL
421

422 423 424 425 426 427 428 429 430 431 432 433
   visited:

   	Used in tree traversals to mark visited nodes.

   invariant_flag:

	TREE_INVARIANT in
	    all expressions.

   nowarning_flag:

       TREE_NO_WARNING in
434
           ... any expr or decl node
435
*/
436

Richard Stallman committed
437 438 439 440 441 442
/* Define accessors for the fields that all tree nodes have
   (though some fields are not used for all kinds of nodes).  */

/* The tree-code says what kind of node it is.
   Codes are defined in tree.def.  */
#define TREE_CODE(NODE) ((enum tree_code) (NODE)->common.code)
443
#define TREE_SET_CODE(NODE, VALUE) ((NODE)->common.code = (VALUE))
Richard Stallman committed
444

445
/* When checking is enabled, errors will be generated if a tree node
446
   is accessed incorrectly. The macros die with a fatal error.  */
447
#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
448

449 450 451
#define TREE_CHECK(T, CODE) __extension__				\
({  const tree __t = (T);						\
    if (TREE_CODE (__t) != (CODE))					\
452 453 454 455 456 457 458 459 460
      tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, 	\
			 (CODE), 0);					\
    __t; })

#define TREE_NOT_CHECK(T, CODE) __extension__				\
({  const tree __t = (T);						\
    if (TREE_CODE (__t) == (CODE))					\
      tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,	\
			     (CODE), 0);				\
461
    __t; })
462

463 464 465 466
#define TREE_CHECK2(T, CODE1, CODE2) __extension__			\
({  const tree __t = (T);						\
    if (TREE_CODE (__t) != (CODE1)					\
	&& TREE_CODE (__t) != (CODE2))					\
467 468 469 470 471 472 473 474 475 476
      tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,		\
 			 (CODE1), (CODE2), 0);				\
    __t; })

#define TREE_NOT_CHECK2(T, CODE1, CODE2) __extension__			\
({  const tree __t = (T);						\
    if (TREE_CODE (__t) == (CODE1)					\
	|| TREE_CODE (__t) == (CODE2))					\
      tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,	\
			     (CODE1), (CODE2), 0);			\
477 478 479 480 481 482 483
    __t; })

#define TREE_CHECK3(T, CODE1, CODE2, CODE3) __extension__		\
({  const tree __t = (T);						\
    if (TREE_CODE (__t) != (CODE1)					\
	&& TREE_CODE (__t) != (CODE2)					\
	&& TREE_CODE (__t) != (CODE3))					\
484 485 486 487 488 489 490 491 492 493 494
      tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,		\
			     (CODE1), (CODE2), (CODE3), 0);		\
    __t; })

#define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) __extension__		\
({  const tree __t = (T);						\
    if (TREE_CODE (__t) == (CODE1)					\
	|| TREE_CODE (__t) == (CODE2)					\
	|| TREE_CODE (__t) == (CODE3))					\
      tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,	\
			     (CODE1), (CODE2), (CODE3), 0);		\
495 496
    __t; })

497 498 499 500 501 502
#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) __extension__	\
({  const tree __t = (T);						\
    if (TREE_CODE (__t) != (CODE1)					\
	&& TREE_CODE (__t) != (CODE2)					\
	&& TREE_CODE (__t) != (CODE3)					\
	&& TREE_CODE (__t) != (CODE4))					\
503 504 505 506 507 508 509 510 511 512 513 514
      tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,		\
			     (CODE1), (CODE2), (CODE3), (CODE4), 0);	\
    __t; })

#define NON_TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) __extension__	\
({  const tree __t = (T);						\
    if (TREE_CODE (__t) == (CODE1)					\
	|| TREE_CODE (__t) == (CODE2)					\
	|| TREE_CODE (__t) == (CODE3)					\
	|| TREE_CODE (__t) == (CODE4))					\
      tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,	\
			     (CODE1), (CODE2), (CODE3), (CODE4), 0);	\
515 516
    __t; })

517 518 519 520 521 522 523
#define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) __extension__	\
({  const tree __t = (T);						\
    if (TREE_CODE (__t) != (CODE1)					\
	&& TREE_CODE (__t) != (CODE2)					\
	&& TREE_CODE (__t) != (CODE3)					\
	&& TREE_CODE (__t) != (CODE4)					\
	&& TREE_CODE (__t) != (CODE5))					\
524 525 526 527 528 529 530 531 532 533 534 535 536
      tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,		\
			     (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), 0);\
    __t; })

#define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) __extension__ \
({  const tree __t = (T);						\
    if (TREE_CODE (__t) == (CODE1)					\
	|| TREE_CODE (__t) == (CODE2)					\
	|| TREE_CODE (__t) == (CODE3)					\
	|| TREE_CODE (__t) == (CODE4)					\
	|| TREE_CODE (__t) == (CODE5))					\
      tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,	\
			     (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), 0);\
537 538
    __t; })

539 540 541 542
#define TREE_CLASS_CHECK(T, CLASS) __extension__			\
({  const tree __t = (T);						\
    if (TREE_CODE_CLASS (TREE_CODE(__t)) != (CLASS))			\
      tree_class_check_failed (__t, (CLASS), __FILE__, __LINE__,	\
543
			       __FUNCTION__);				\
544 545 546
    __t; })

/* These checks have to be special cased.  */
547 548 549
#define EXPR_CHECK(T) __extension__					\
({  const tree __t = (T);						\
    char const __c = TREE_CODE_CLASS (TREE_CODE (__t));			\
550
    if (!IS_EXPR_CODE_CLASS (__c))					\
551
      tree_class_check_failed (__t, tcc_expression, __FILE__, __LINE__,	\
552 553 554 555 556 557
			       __FUNCTION__);				\
    __t; })

/* These checks have to be special cased.  */
#define NON_TYPE_CHECK(T) __extension__					\
({  const tree __t = (T);						\
558
    if (TYPE_P (__t))							\
559
      tree_class_check_failed (__t, tcc_type, __FILE__, __LINE__,	\
560
			       __FUNCTION__);				\
561 562
    __t; })

563 564 565
#define TREE_VEC_ELT_CHECK(T, I) __extension__				\
(*({const tree __t = (T);						\
    const int __i = (I);						\
566
    if (TREE_CODE (__t) != TREE_VEC)					\
567 568
      tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,		\
  			 TREE_VEC, 0);					\
569 570 571 572 573
    if (__i < 0 || __i >= __t->vec.length)				\
      tree_vec_elt_check_failed (__i, __t->vec.length,			\
				 __FILE__, __LINE__, __FUNCTION__);	\
    &__t->vec.a[__i]; }))

574 575 576 577
#define PHI_NODE_ELT_CHECK(t, i) __extension__				\
(*({const tree __t = t;							\
    const int __i = (i);						\
    if (TREE_CODE (__t) != PHI_NODE)					\
578 579
      tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__,  	\
			 PHI_NODE, 0);					\
580 581 582 583 584
    if (__i < 0 || __i >= __t->phi.capacity)				\
      phi_node_elt_check_failed (__i, __t->phi.num_args,		\
				 __FILE__, __LINE__, __FUNCTION__);	\
    &__t->phi.a[__i]; }))

585
/* Special checks for TREE_OPERANDs.  */
586
#define TREE_OPERAND_CHECK(T, I) __extension__				\
Richard Kenner committed
587
(*({const tree __t = EXPR_CHECK (T);					\
588
    const int __i = (I);						\
589 590 591 592 593
    if (__i < 0 || __i >= TREE_CODE_LENGTH (TREE_CODE (__t)))		\
      tree_operand_check_failed (__i, TREE_CODE (__t),			\
				 __FILE__, __LINE__, __FUNCTION__);	\
    &__t->exp.operands[__i]; }))

594 595 596 597
#define TREE_OPERAND_CHECK_CODE(T, CODE, I) __extension__		\
(*({const tree __t = (T);						\
    const int __i = (I);						\
    if (TREE_CODE (__t) != CODE)					\
598
      tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, (CODE), 0);\
599 600
    if (__i < 0 || __i >= TREE_CODE_LENGTH (CODE))			\
      tree_operand_check_failed (__i, (CODE),				\
601 602 603
				 __FILE__, __LINE__, __FUNCTION__);	\
    &__t->exp.operands[__i]; }))

604
#define TREE_RTL_OPERAND_CHECK(T, CODE, I) __extension__		\
605
(*(rtx *)								\
606 607 608
 ({const tree __t = (T);						\
    const int __i = (I);						\
    if (TREE_CODE (__t) != (CODE))					\
609
      tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, (CODE), 0); \
610 611
    if (__i < 0 || __i >= TREE_CODE_LENGTH ((CODE)))			\
      tree_operand_check_failed (__i, (CODE),				\
612 613 614
				 __FILE__, __LINE__, __FUNCTION__);	\
    &__t->exp.operands[__i]; }))

615 616 617 618
extern void tree_check_failed (const tree, const char *, int, const char *,
			       ...) ATTRIBUTE_NORETURN;
extern void tree_not_check_failed (const tree, const char *, int, const char *,
				   ...) ATTRIBUTE_NORETURN;
619
extern void tree_class_check_failed (const tree, const enum tree_code_class,
620
				     const char *, int, const char *)
621
    ATTRIBUTE_NORETURN;
622 623
extern void tree_vec_elt_check_failed (int, int, const char *,
				       int, const char *)
624
    ATTRIBUTE_NORETURN;
625 626 627
extern void phi_node_elt_check_failed (int, int, const char *,
				       int, const char *)
    ATTRIBUTE_NORETURN;
628 629
extern void tree_operand_check_failed (int, enum tree_code,
				       const char *, int, const char *)
630
    ATTRIBUTE_NORETURN;
631

632
#else /* not ENABLE_TREE_CHECKING, or not gcc */
633

634
#define TREE_CHECK(T, CODE)			(T)
635
#define TREE_NOT_CHECK(T, CODE)			(T)
636
#define TREE_CHECK2(T, CODE1, CODE2)		(T)
637
#define TREE_NOT_CHECK2(T, CODE1, CODE2)	(T)
638
#define TREE_CHECK3(T, CODE1, CODE2, CODE3)	(T)
639
#define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3)	(T)
640
#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
641
#define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
642
#define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
643
#define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
644 645
#define TREE_CLASS_CHECK(T, CODE)		(T)
#define EXPR_CHECK(T)				(T)
646
#define NON_TYPE_CHECK(T)			(T)
647 648 649
#define TREE_VEC_ELT_CHECK(T, I)		((T)->vec.a[I])
#define TREE_OPERAND_CHECK(T, I)		((T)->exp.operands[I])
#define TREE_OPERAND_CHECK_CODE(T, CODE, I)	((T)->exp.operands[I])
650
#define TREE_RTL_OPERAND_CHECK(T, CODE, I)  (*(rtx *) &((T)->exp.operands[I]))
651
#define PHI_NODE_ELT_CHECK(T, i)	((T)->phi.a[i])
652 653 654

#endif

655 656
#define TREE_BLOCK(NODE)		((NODE)->exp.block)

657 658
#include "tree-check.h"

659 660 661 662
#define TYPE_CHECK(T)		TREE_CLASS_CHECK (T, tcc_type)
#define DECL_CHECK(T)		TREE_CLASS_CHECK (T, tcc_declaration)
#define CST_CHECK(T)		TREE_CLASS_CHECK (T, tcc_constant)
#define STMT_CHECK(T)		TREE_CLASS_CHECK (T, tcc_statement)
663
#define FUNC_OR_METHOD_CHECK(T)	TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TYPE)
664
#define PTR_OR_REF_CHECK(T)	TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE)
665

666
#define RECORD_OR_UNION_CHECK(T)	\
667
  TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
668 669
#define NOT_RECORD_OR_UNION_CHECK(T) \
  TREE_NOT_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
670

671 672 673
#define NUMERICAL_TYPE_CHECK(T)					\
  TREE_CHECK5 (T, INTEGER_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE,	\
	       CHAR_TYPE, REAL_TYPE)
674

Richard Stallman committed
675 676
/* In all nodes that are expressions, this is the data type of the expression.
   In POINTER_TYPE nodes, this is the type that the pointer points to.
677 678
   In ARRAY_TYPE nodes, this is the type of the elements.
   In VECTOR_TYPE nodes, this is the type of the elements.  */
Richard Stallman committed
679 680
#define TREE_TYPE(NODE) ((NODE)->common.type)

681 682
/* Here is how primitive or already-canonicalized types' hash codes
   are made.  */
683 684 685 686 687
#define TYPE_HASH(TYPE) (TYPE_UID (TYPE))

/* A simple hash function for an arbitrary tree node.  This must not be
   used in hash tables which are saved to a PCH.  */
#define TREE_HASH(NODE) ((size_t) (NODE) & 0777777)
688

Richard Stallman committed
689 690 691 692 693 694 695 696 697 698 699 700 701 702
/* Nodes are chained together for many purposes.
   Types are chained together to record them for being output to the debugger
   (see the function `chain_type').
   Decls in the same scope are chained together to record the contents
   of the scope.
   Statement nodes for successive statements used to be chained together.
   Often lists of things are represented by TREE_LIST nodes that
   are chained together.  */

#define TREE_CHAIN(NODE) ((NODE)->common.chain)

/* Given an expression as a tree, strip any NON_LVALUE_EXPRs and NOP_EXPRs
   that don't change the machine mode.  */

703
#define STRIP_NOPS(EXP)						\
Richard Stallman committed
704 705 706
  while ((TREE_CODE (EXP) == NOP_EXPR				\
	  || TREE_CODE (EXP) == CONVERT_EXPR			\
	  || TREE_CODE (EXP) == NON_LVALUE_EXPR)		\
707
	 && TREE_OPERAND (EXP, 0) != error_mark_node		\
Richard Stallman committed
708 709
	 && (TYPE_MODE (TREE_TYPE (EXP))			\
	     == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0)))))	\
710
    (EXP) = TREE_OPERAND (EXP, 0)
Richard Stallman committed
711

Richard Kenner committed
712 713 714 715 716 717
/* Like STRIP_NOPS, but don't let the signedness change either.  */

#define STRIP_SIGN_NOPS(EXP) \
  while ((TREE_CODE (EXP) == NOP_EXPR				\
	  || TREE_CODE (EXP) == CONVERT_EXPR			\
	  || TREE_CODE (EXP) == NON_LVALUE_EXPR)		\
718
	 && TREE_OPERAND (EXP, 0) != error_mark_node		\
Richard Kenner committed
719 720
	 && (TYPE_MODE (TREE_TYPE (EXP))			\
	     == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))	\
721 722
	 && (TYPE_UNSIGNED (TREE_TYPE (EXP))			\
	     == TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
723
    (EXP) = TREE_OPERAND (EXP, 0)
Richard Kenner committed
724

Richard Stallman committed
725 726 727 728 729 730
/* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */

#define STRIP_TYPE_NOPS(EXP) \
  while ((TREE_CODE (EXP) == NOP_EXPR				\
	  || TREE_CODE (EXP) == CONVERT_EXPR			\
	  || TREE_CODE (EXP) == NON_LVALUE_EXPR)		\
731
	 && TREE_OPERAND (EXP, 0) != error_mark_node		\
Richard Stallman committed
732 733
	 && (TREE_TYPE (EXP)					\
	     == TREE_TYPE (TREE_OPERAND (EXP, 0))))		\
734
    (EXP) = TREE_OPERAND (EXP, 0)
735

736 737 738 739 740 741 742
/* Remove unnecessary type conversions according to
   tree_ssa_useless_type_conversion.  */

#define STRIP_USELESS_TYPE_CONVERSION(EXP)				\
      while (tree_ssa_useless_type_conversion (EXP))			\
	EXP = TREE_OPERAND (EXP, 0)

743
/* Nonzero if TYPE represents an integral type.  Note that we do not
744
   include COMPLEX types here.  Keep these checks in ascending code
745
   order.  */
746 747

#define INTEGRAL_TYPE_P(TYPE)  \
748 749 750 751
  (TREE_CODE (TYPE) == ENUMERAL_TYPE  \
   || TREE_CODE (TYPE) == BOOLEAN_TYPE \
   || TREE_CODE (TYPE) == CHAR_TYPE \
   || TREE_CODE (TYPE) == INTEGER_TYPE)
752

753 754 755 756 757 758 759 760 761 762
/* Nonzero if TYPE represents a scalar floating-point type.  */

#define SCALAR_FLOAT_TYPE_P(TYPE) (TREE_CODE (TYPE) == REAL_TYPE)

/* Nonzero if TYPE represents a complex floating-point type.  */

#define COMPLEX_FLOAT_TYPE_P(TYPE)	\
  (TREE_CODE (TYPE) == COMPLEX_TYPE	\
   && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)

763 764 765 766 767 768
/* Nonzero if TYPE represents a vector floating-point type.  */

#define VECTOR_FLOAT_TYPE_P(TYPE)	\
  (TREE_CODE (TYPE) == VECTOR_TYPE	\
   && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)

769
/* Nonzero if TYPE represents a floating-point type, including complex
770 771
   and vector floating-point types.  The vector and complex check does
   not use the previous two macros to enable early folding.  */
772

773 774 775 776 777
#define FLOAT_TYPE_P(TYPE)			\
  (SCALAR_FLOAT_TYPE_P (TYPE)			\
   || ((TREE_CODE (TYPE) == COMPLEX_TYPE 	\
        || TREE_CODE (TYPE) == VECTOR_TYPE)	\
       && SCALAR_FLOAT_TYPE_P (TREE_TYPE (TYPE))))
778

779 780
/* Nonzero if TYPE represents an aggregate (multi-component) type.
   Keep these checks in ascending code order.  */
781 782 783

#define AGGREGATE_TYPE_P(TYPE) \
  (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \
784
   || TREE_CODE (TYPE) == UNION_TYPE || TREE_CODE (TYPE) == QUAL_UNION_TYPE)
785

786
/* Nonzero if TYPE represents a pointer or reference type.
787 788
   (It should be renamed to INDIRECT_TYPE_P.)  Keep these checks in
   ascending code order.  */
789 790 791

#define POINTER_TYPE_P(TYPE) \
  (TREE_CODE (TYPE) == POINTER_TYPE || TREE_CODE (TYPE) == REFERENCE_TYPE)
792

793 794 795
/* Nonzero if this type is a complete type.  */
#define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE)

796
/* Nonzero if this type is the (possibly qualified) void type.  */
797
#define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE)
798

799 800
/* Nonzero if this type is complete or is cv void.  */
#define COMPLETE_OR_VOID_TYPE_P(NODE) \
801
  (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE))
802 803 804

/* Nonzero if this type is complete or is an array with unspecified bound.  */
#define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \
805
  (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE)))
806

Richard Stallman committed
807 808 809 810 811 812 813

/* Define many boolean fields that all tree nodes have.  */

/* In VAR_DECL nodes, nonzero means address of this is needed.
   So it cannot be in a register.
   In a FUNCTION_DECL, nonzero means its address is needed.
   So it must be compiled even if it is an inline function.
814 815 816
   In a FIELD_DECL node, it means that the programmer is permitted to
   construct the address of this field.  This is used for aliasing
   purposes: see record_component_aliases.
Richard Stallman committed
817
   In CONSTRUCTOR nodes, it means object constructed must be in memory.
Kazu Hirata committed
818
   In LABEL_DECL nodes, it means a goto for this label has been seen
Richard Stallman committed
819 820 821 822 823 824 825 826
   from a place outside all binding contours that restore stack levels.
   In ..._TYPE nodes, it means that objects of this type must
   be fully addressable.  This means that pieces of this
   object cannot go into register parameters, for example.
   In IDENTIFIER_NODEs, this means that some extern decl for this name
   had its address taken.  That matters for inline functions.  */
#define TREE_ADDRESSABLE(NODE) ((NODE)->common.addressable_flag)

827 828 829
/* Set on a CALL_EXPR if the call is in a tail position, ie. just before the
   exit of a function.  Calls for which this is true are candidates for tail
   call optimizations.  */
830 831
#define CALL_EXPR_TAILCALL(NODE) (CALL_EXPR_CHECK(NODE)->common.addressable_flag)

Richard Stallman committed
832
/* In a VAR_DECL, nonzero means allocate static storage.
833
   In a FUNCTION_DECL, nonzero if function has been defined.
834 835 836 837
   In a CONSTRUCTOR, nonzero means allocate static storage.

   ??? This is also used in lots of other nodes in unclear ways which
   should be cleaned up some day.  */
Richard Stallman committed
838 839
#define TREE_STATIC(NODE) ((NODE)->common.static_flag)

840 841 842
/* In a TARGET_EXPR, WITH_CLEANUP_EXPR, means that the pertinent cleanup
   should only be executed if an exception is thrown, not on normal exit
   of its scope.  */
843 844
#define CLEANUP_EH_ONLY(NODE) ((NODE)->common.static_flag)

845
/* In an expr node (usually a conversion) this means the node was made
846 847 848 849
   implicitly and should not lead to any sort of warning.  In a decl node,
   warnings concerning the decl should be suppressed.  This is used at
   least for used-before-set warnings, and it set after one warning is
   emitted.  */
850
#define TREE_NO_WARNING(NODE) ((NODE)->common.nowarning_flag)
Richard Stallman committed
851

852 853 854 855
/* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST this means
   there was an overflow in folding.  This is distinct from
   TREE_OVERFLOW because ANSI C requires a diagnostic when overflows
   occur in constant expressions.  */
856
#define TREE_CONSTANT_OVERFLOW(NODE) (CST_CHECK (NODE)->common.static_flag)
857

858 859
/* In an IDENTIFIER_NODE, this means that assemble_name was called with
   this string as an argument.  */
860
#define TREE_SYMBOL_REFERENCED(NODE) \
861
  (IDENTIFIER_NODE_CHECK (NODE)->common.static_flag)
862

863 864 865 866 867
/* Nonzero in a pointer or reference type means the data pointed to
   by this type can alias anything.  */
#define TYPE_REF_CAN_ALIAS_ALL(NODE) \
  (PTR_OR_REF_CHECK (NODE)->common.static_flag)

868 869
/* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST, this means
   there was an overflow in folding, and no warning has been issued
870
   for this subexpression.  TREE_OVERFLOW implies TREE_CONSTANT_OVERFLOW,
871
   but not vice versa.
872 873 874

   ??? Apparently, lots of code assumes this is defined in all
   expressions.  */
875 876
#define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag)

Richard Stallman committed
877 878
/* In a VAR_DECL or FUNCTION_DECL,
   nonzero means name is to be accessible from outside this module.
879
   In an IDENTIFIER_NODE, nonzero means an external declaration
880
   accessible from outside this module was previously seen
Richard Stallman committed
881 882 883
   for this name in an inner scope.  */
#define TREE_PUBLIC(NODE) ((NODE)->common.public_flag)

884 885 886
/* In a _TYPE, indicates whether TYPE_CACHED_VALUES contains a vector
   of cached values, or is something else.  */
#define TYPE_CACHED_VALUES_P(NODE) (TYPE_CHECK(NODE)->common.public_flag)
887 888 889 890 891

/* In a SAVE_EXPR, indicates that the original expression has already
   been substituted with a VAR_DECL that contains the value.  */
#define SAVE_EXPR_RESOLVED_P(NODE) \
  (TREE_CHECK (NODE, SAVE_EXPR)->common.public_flag)
892

893 894 895 896 897 898 899
/* In any expression, decl, or constant, nonzero means it has side effects or
   reevaluation of the whole expression could produce a different value.
   This is set if any subexpression is a function call, a side effect or a
   reference to a volatile variable.  In a ..._DECL, this is set only if the
   declaration said `volatile'.  This will never be set for a constant.  */
#define TREE_SIDE_EFFECTS(NODE) \
  (NON_TYPE_CHECK (NODE)->common.side_effects_flag)
Richard Stallman committed
900

901 902 903 904 905
/* In a LABEL_DECL, nonzero means this label had its address taken
   and therefore can never be deleted and is a jump target for
   computed gotos.  */
#define FORCED_LABEL(NODE) ((NODE)->common.side_effects_flag)

Richard Stallman committed
906 907 908 909
/* Nonzero means this expression is volatile in the C sense:
   its address should be of type `volatile WHATEVER *'.
   In other words, the declared item is volatile qualified.
   This is used in _DECL nodes and _REF nodes.
910 911 912
   On a FUNCTION_DECL node, this means the function does not
   return normally.  This is the same effect as setting
   the attribute noreturn on the function in C.
Richard Stallman committed
913 914 915 916 917 918 919 920

   In a ..._TYPE node, means this type is volatile-qualified.
   But use TYPE_VOLATILE instead of this macro when the node is a type,
   because eventually we may make that a different bit.

   If this bit is set in an expression, so is TREE_SIDE_EFFECTS.  */
#define TREE_THIS_VOLATILE(NODE) ((NODE)->common.volatile_flag)

921 922 923
/* Nonzero means this node will not trap.  In an INDIRECT_REF, means
   accessing the memory pointed to won't generate a trap.  However,
   this only applies to an object when used appropriately: it doesn't
924 925
   mean that writing a READONLY mem won't trap. Similarly for
   ALIGN_INDIRECT_REF and MISALIGNED_INDIRECT_REF.
926

927 928 929 930
   In ARRAY_REF and ARRAY_RANGE_REF means that we know that the index
   (or slice of the array) always belongs to the range of the array.
   I.e. that the access will not trap, provided that the access to
   the base to the array will not trap.  */
931 932
#define TREE_THIS_NOTRAP(NODE) ((NODE)->common.nothrow_flag)

Richard Stallman committed
933
/* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node,
934 935
   nonzero means it may not be the lhs of an assignment.  */
#define TREE_READONLY(NODE) (NON_TYPE_CHECK (NODE)->common.readonly_flag)
Richard Stallman committed
936

937
/* Nonzero if NODE is a _DECL with TREE_READONLY set.  */
938 939
#define TREE_READONLY_DECL_P(NODE)\
	(DECL_P (NODE) && TREE_READONLY (NODE))
940

941 942 943
/* Value of expression is constant.  Always on in all ..._CST nodes.  May
   also appear in an expression or decl where the value is constant.  */
#define TREE_CONSTANT(NODE) (NON_TYPE_CHECK (NODE)->common.constant_flag)
Richard Stallman committed
944

Richard Henderson committed
945 946 947
/* Nonzero if NODE, a type, has had its sizes gimplified.  */
#define TYPE_SIZES_GIMPLIFIED(NODE) (TYPE_CHECK (NODE)->common.constant_flag)

948 949 950 951 952 953
/* In a decl (most significantly a FIELD_DECL), means an unsigned field.  */
#define DECL_UNSIGNED(NODE) (DECL_CHECK (NODE)->common.unsigned_flag)

/* In a BIT_FIELD_REF, means the bitfield is to be interpreted as unsigned.  */
#define BIT_FIELD_REF_UNSIGNED(NODE) \
  (BIT_FIELD_REF_CHECK (NODE)->common.unsigned_flag)
Richard Stallman committed
954

955 956 957
/* In integral and pointer types, means an unsigned type.  */
#define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->common.unsigned_flag)

958
#define TYPE_TRAP_SIGNED(NODE) \
959
  (flag_trapv && ! TYPE_UNSIGNED (NODE))
960

Richard Stallman committed
961 962 963 964
/* Nonzero in a VAR_DECL means assembler code has been written.
   Nonzero in a FUNCTION_DECL means that the function has been compiled.
   This is interesting in an inline function, since it might not need
   to be compiled separately.
965
   Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE
966
   if the sdb debugging info for the type has been written.
967
   In a BLOCK node, nonzero if reorder_blocks has already seen this block.
968 969
   In an SSA_NAME node, nonzero if the SSA_NAME occurs in an abnormal
   PHI node.  */
Richard Stallman committed
970 971 972 973 974
#define TREE_ASM_WRITTEN(NODE) ((NODE)->common.asm_written_flag)

/* Nonzero in a _DECL if the name is used in its scope.
   Nonzero in an expr node means inhibit warning if value is unused.
   In IDENTIFIER_NODEs, this means that some extern decl for this name
975 976
   was used.  
   In a BLOCK, this means that the block contains variables that are used.  */
Richard Stallman committed
977 978
#define TREE_USED(NODE) ((NODE)->common.used_flag)

979 980 981
/* In a FUNCTION_DECL, nonzero means a call to the function cannot throw
   an exception.  In a CALL_EXPR, nonzero means the call cannot throw.  */
#define TREE_NOTHROW(NODE) ((NODE)->common.nothrow_flag)
982

983 984 985 986
/* In a CALL_EXPR, means that the address of the return slot is part of the
   argument list.  */
#define CALL_EXPR_HAS_RETURN_SLOT_ADDR(NODE) ((NODE)->common.private_flag)

987 988 989 990
/* In a RESULT_DECL or PARM_DECL, means that it is passed by invisible
   reference (and the TREE_TYPE is a pointer to the true type).  */
#define DECL_BY_REFERENCE(NODE) (DECL_CHECK (NODE)->common.private_flag)

991 992 993 994
/* In a CALL_EXPR, means that the call is the jump from a thunk to the
   thunked-to function.  */
#define CALL_FROM_THUNK_P(NODE) ((NODE)->common.protected_flag)

995 996 997 998 999
/* In a type, nonzero means that all objects of the type are guaranteed by the
   language or front-end to be properly aligned, so we can indicate that a MEM
   of this type is aligned at least to the alignment of the type, even if it
   doesn't appear that it is.  We see this, for example, in object-oriented
   languages where a tag field may show this is an object of a more-aligned
1000 1001 1002 1003
   variant of the more generic type.

   In an SSA_NAME node, nonzero if the SSA_NAME node is on the SSA_NAME
   freelist.  */
1004
#define TYPE_ALIGN_OK(NODE) (TYPE_CHECK (NODE)->common.nothrow_flag)
Richard Stallman committed
1005

1006
/* Used in classes in C++.  */
Richard Stallman committed
1007
#define TREE_PRIVATE(NODE) ((NODE)->common.private_flag)
1008 1009
/* Used in classes in C++.
   In a BLOCK node, this is BLOCK_HANDLER_BLOCK.  */
Richard Stallman committed
1010 1011
#define TREE_PROTECTED(NODE) ((NODE)->common.protected_flag)

1012
/* Nonzero in an IDENTIFIER_NODE if the use of the name is defined as a
1013 1014 1015
   deprecated feature by __attribute__((deprecated)).  */
#define TREE_DEPRECATED(NODE) ((NODE)->common.deprecated_flag)

1016 1017 1018 1019 1020 1021
/* Value of expression is function invariant.  A strict subset of
   TREE_CONSTANT, such an expression is constant over any one function
   invocation, though not across different invocations.  May appear in
   any expression node.  */
#define TREE_INVARIANT(NODE) ((NODE)->common.invariant_flag)

1022
/* These flags are available for each language front end to use internally.  */
Richard Stallman committed
1023 1024 1025 1026 1027 1028 1029 1030 1031 1032
#define TREE_LANG_FLAG_0(NODE) ((NODE)->common.lang_flag_0)
#define TREE_LANG_FLAG_1(NODE) ((NODE)->common.lang_flag_1)
#define TREE_LANG_FLAG_2(NODE) ((NODE)->common.lang_flag_2)
#define TREE_LANG_FLAG_3(NODE) ((NODE)->common.lang_flag_3)
#define TREE_LANG_FLAG_4(NODE) ((NODE)->common.lang_flag_4)
#define TREE_LANG_FLAG_5(NODE) ((NODE)->common.lang_flag_5)
#define TREE_LANG_FLAG_6(NODE) ((NODE)->common.lang_flag_6)

/* Define additional fields and accessors for nodes representing constants.  */

1033 1034
/* In an INTEGER_CST node.  These two together make a 2-word integer.
   If the data type is signed, the value is sign-extended to 2 words
Richard Stallman committed
1035
   even though not all of them may really be in use.
1036
   In an unsigned constant shorter than 2 words, the extra bits are 0.  */
1037 1038 1039
#define TREE_INT_CST(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst)
#define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low)
#define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high)
Richard Stallman committed
1040

1041 1042 1043
#define INT_CST_LT(A, B)				\
  (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B)	\
   || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B)	\
1044
       && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
Richard Stallman committed
1045

1046 1047 1048 1049
#define INT_CST_LT_UNSIGNED(A, B)				\
  (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A)		\
    < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B))		\
   || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A)		\
Kazu Hirata committed
1050
	== (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B))	\
1051
       && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
1052

1053
struct tree_int_cst GTY(())
Richard Stallman committed
1054
{
1055
  struct tree_common common;
1056 1057 1058
  /* A sub-struct is necessary here because the function `const_hash'
     wants to scan both words as a unit and taking the address of the
     sub-struct yields the properly inclusive bounded pointer.  */
1059
  struct tree_int_cst_lowhi {
1060 1061 1062
    unsigned HOST_WIDE_INT low;
    HOST_WIDE_INT high;
  } int_cst;
Richard Stallman committed
1063 1064
};

1065
/* In a REAL_CST node.  struct real_value is an opaque entity, with
1066 1067
   manipulators defined in real.h.  We don't want tree.h depending on
   real.h and transitively on tm.h.  */
1068
struct real_value;
1069

1070 1071
#define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr)
#define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE))
Richard Stallman committed
1072

1073
struct tree_real_cst GTY(())
Richard Stallman committed
1074
{
1075
  struct tree_common common;
1076
  struct real_value * real_cst_ptr;
Richard Stallman committed
1077 1078 1079
};

/* In a STRING_CST */
1080
#define TREE_STRING_LENGTH(NODE) (STRING_CST_CHECK (NODE)->string.length)
1081 1082
#define TREE_STRING_POINTER(NODE) \
  ((const char *)(STRING_CST_CHECK (NODE)->string.str))
Richard Stallman committed
1083

1084
struct tree_string GTY(())
Richard Stallman committed
1085
{
1086
  struct tree_common common;
Richard Stallman committed
1087
  int length;
1088
  char str[1];
Richard Stallman committed
1089 1090 1091
};

/* In a COMPLEX_CST node.  */
1092 1093
#define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real)
#define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag)
Richard Stallman committed
1094

1095
struct tree_complex GTY(())
Richard Stallman committed
1096
{
1097
  struct tree_common common;
1098 1099
  tree real;
  tree imag;
Richard Stallman committed
1100
};
1101 1102 1103 1104

/* In a VECTOR_CST node.  */
#define TREE_VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elements)

1105
struct tree_vector GTY(())
1106 1107 1108 1109
{
  struct tree_common common;
  tree elements;
};
Richard Stallman committed
1110

1111
#include "symtab.h"
1112

Richard Stallman committed
1113 1114
/* Define fields and accessors for some special-purpose tree nodes.  */

1115
#define IDENTIFIER_LENGTH(NODE) \
1116
  (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
1117
#define IDENTIFIER_POINTER(NODE) \
1118
  ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
1119 1120
#define IDENTIFIER_HASH_VALUE(NODE) \
  (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.hash_value)
1121 1122 1123 1124 1125

/* Translate a hash table identifier pointer to a tree_identifier
   pointer, and vice versa.  */

#define HT_IDENT_TO_GCC_IDENT(NODE) \
1126 1127
  ((tree) ((char *) (NODE) - sizeof (struct tree_common)))
#define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id)
Richard Stallman committed
1128

1129
struct tree_identifier GTY(())
Richard Stallman committed
1130
{
1131
  struct tree_common common;
1132
  struct ht_identifier id;
Richard Stallman committed
1133 1134 1135
};

/* In a TREE_LIST node.  */
1136 1137
#define TREE_PURPOSE(NODE) (TREE_LIST_CHECK (NODE)->list.purpose)
#define TREE_VALUE(NODE) (TREE_LIST_CHECK (NODE)->list.value)
Richard Stallman committed
1138

1139
struct tree_list GTY(())
Richard Stallman committed
1140
{
1141
  struct tree_common common;
1142 1143
  tree purpose;
  tree value;
Richard Stallman committed
1144 1145 1146
};

/* In a TREE_VEC node.  */
1147
#define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length)
1148 1149
#define TREE_VEC_END(NODE) \
  ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.length]))
Richard Stallman committed
1150

1151 1152
#define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I)

1153
struct tree_vec GTY(())
Richard Stallman committed
1154
{
1155
  struct tree_common common;
Richard Stallman committed
1156
  int length;
1157
  tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1];
Richard Stallman committed
1158 1159 1160 1161
};

/* Define fields and accessors for some nodes that represent expressions.  */

1162
/* Nonzero if NODE is an empty statement (NOP_EXPR <0>).  */
1163 1164 1165 1166
#define IS_EMPTY_STMT(NODE)	(TREE_CODE (NODE) == NOP_EXPR \
				 && VOID_TYPE_P (TREE_TYPE (NODE)) \
				 && integer_zerop (TREE_OPERAND (NODE, 0)))

Richard Stallman committed
1167
/* In a CONSTRUCTOR node.  */
1168
#define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND_CHECK_CODE (NODE, CONSTRUCTOR, 0)
Richard Stallman committed
1169

1170
/* In ordinary expression nodes.  */
1171
#define TREE_OPERAND(NODE, I) TREE_OPERAND_CHECK (NODE, I)
1172
#define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->exp.complexity)
1173

1174 1175 1176
/* In INDIRECT_REF, ALIGN_INDIRECT_REF, MISALIGNED_INDIRECT_REF.  */
#define REF_ORIGINAL(NODE) TREE_CHAIN (TREE_CHECK3 (NODE, 	\
	INDIRECT_REF, ALIGN_INDIRECT_REF, MISALIGNED_INDIRECT_REF))
1177

1178
/* In a LOOP_EXPR node.  */
1179
#define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0)
1180

1181 1182 1183 1184 1185
#ifdef USE_MAPPED_LOCATION
/* The source location of this expression.  Non-tree_exp nodes such as
   decls and constants can be shared among multiple locations, so
   return nothing.  */
#define EXPR_LOCATION(NODE)					\
1186
  (EXPR_P (NODE) ? (NODE)->exp.locus : UNKNOWN_LOCATION)
1187 1188 1189
#define SET_EXPR_LOCATION(NODE, FROM) \
  (EXPR_CHECK (NODE)->exp.locus = (FROM))
#define EXPR_HAS_LOCATION(NODE) (EXPR_LOCATION (NODE) != UNKNOWN_LOCATION)
1190
/* EXPR_LOCUS and SET_EXPR_LOCUS are deprecated.  */
1191
#define EXPR_LOCUS(NODE)					\
1192
  (EXPR_P (NODE) ? &(NODE)->exp.locus : (location_t *)NULL)
1193 1194 1195 1196 1197 1198 1199 1200 1201
#define SET_EXPR_LOCUS(NODE, FROM) \
  do { source_location *loc_tmp = FROM; \
       EXPR_CHECK (NODE)->exp.locus \
       = loc_tmp == NULL ? UNKNOWN_LOCATION : *loc_tmp; } while (0)
#define EXPR_FILENAME(NODE) \
  LOCATION_FILE (EXPR_CHECK (NODE)->exp.locus)
#define EXPR_LINENO(NODE) \
  LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus)
#else
1202 1203 1204 1205
/* The source location of this expression.  Non-tree_exp nodes such as
   decls and constants can be shared among multiple locations, so
   return nothing.  */
#define EXPR_LOCUS(NODE)					\
1206
  (EXPR_P (NODE) ? (NODE)->exp.locus : (location_t *)NULL)
1207 1208
#define SET_EXPR_LOCUS(NODE, FROM) \
  (EXPR_CHECK (NODE)->exp.locus = (FROM))
1209
#define SET_EXPR_LOCATION(NODE, FROM) annotate_with_locus (NODE, FROM)
1210 1211 1212 1213 1214
#define EXPR_FILENAME(NODE) \
  (EXPR_CHECK (NODE)->exp.locus->file)
#define EXPR_LINENO(NODE) \
  (EXPR_CHECK (NODE)->exp.locus->line)
#define EXPR_HAS_LOCATION(NODE) (EXPR_LOCUS (NODE) != NULL)
1215 1216
#define EXPR_LOCATION(NODE) \
  (EXPR_HAS_LOCATION(NODE) ? *(NODE)->exp.locus : UNKNOWN_LOCATION)
1217
#endif
1218

1219
/* In a TARGET_EXPR node.  */
1220 1221 1222
#define TARGET_EXPR_SLOT(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 0)
#define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1)
#define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 2)
1223

1224 1225 1226 1227
/* DECL_EXPR accessor. This gives access to the DECL associated with
   the given declaration statement.  */
#define DECL_EXPR_DECL(NODE)    TREE_OPERAND (DECL_EXPR_CHECK (NODE), 0)

1228 1229 1230 1231 1232
#define EXIT_EXPR_COND(NODE)	     TREE_OPERAND (EXIT_EXPR_CHECK (NODE), 0)

/* SWITCH_EXPR accessors. These give access to the condition, body and
   original condition type (before any compiler conversions)
   of the switch statement, respectively.  */
1233 1234 1235
#define SWITCH_COND(NODE)       TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 0)
#define SWITCH_BODY(NODE)       TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 1)
#define SWITCH_LABELS(NODE)     TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 2)
1236

1237
/* CASE_LABEL_EXPR accessors. These give access to the high and low values
1238
   of a case label, respectively.  */
1239 1240 1241
#define CASE_LOW(NODE)          	TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0)
#define CASE_HIGH(NODE)         	TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1)
#define CASE_LABEL(NODE)		TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 2)
1242 1243 1244 1245 1246 1247 1248 1249 1250 1251

/* The operands of a BIND_EXPR.  */
#define BIND_EXPR_VARS(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 0))
#define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1))
#define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2))

/* GOTO_EXPR accessor. This gives access to the label associated with
   a goto statement.  */
#define GOTO_DESTINATION(NODE)  TREE_OPERAND ((NODE), 0)

1252
/* ASM_EXPR accessors. ASM_STRING returns a STRING_CST for the
1253 1254 1255
   instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and
   ASM_CLOBBERS represent the outputs, inputs, and clobbers for the
   statement.  */
1256 1257 1258 1259
#define ASM_STRING(NODE)        TREE_OPERAND (ASM_EXPR_CHECK (NODE), 0)
#define ASM_OUTPUTS(NODE)       TREE_OPERAND (ASM_EXPR_CHECK (NODE), 1)
#define ASM_INPUTS(NODE)        TREE_OPERAND (ASM_EXPR_CHECK (NODE), 2)
#define ASM_CLOBBERS(NODE)      TREE_OPERAND (ASM_EXPR_CHECK (NODE), 3)
1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275
/* Nonzero if we want to create an ASM_INPUT instead of an
   ASM_OPERAND with no operands.  */
#define ASM_INPUT_P(NODE) (TREE_STATIC (NODE))
#define ASM_VOLATILE_P(NODE) (TREE_PUBLIC (NODE))

/* COND_EXPR accessors.  */
#define COND_EXPR_COND(NODE)	(TREE_OPERAND (COND_EXPR_CHECK (NODE), 0))
#define COND_EXPR_THEN(NODE)	(TREE_OPERAND (COND_EXPR_CHECK (NODE), 1))
#define COND_EXPR_ELSE(NODE)	(TREE_OPERAND (COND_EXPR_CHECK (NODE), 2))

/* LABEL_EXPR accessor. This gives access to the label associated with
   the given label expression.  */
#define LABEL_EXPR_LABEL(NODE)  TREE_OPERAND (LABEL_EXPR_CHECK (NODE), 0)

/* VDEF_EXPR accessors are specified in tree-flow.h, along with the other
   accessors for SSA operands.  */
1276

1277 1278 1279 1280 1281 1282 1283 1284 1285
/* CATCH_EXPR accessors.  */
#define CATCH_TYPES(NODE)	TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 0)
#define CATCH_BODY(NODE)	TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 1)

/* EH_FILTER_EXPR accessors.  */
#define EH_FILTER_TYPES(NODE)	TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 0)
#define EH_FILTER_FAILURE(NODE)	TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 1)
#define EH_FILTER_MUST_NOT_THROW(NODE) TREE_STATIC (EH_FILTER_EXPR_CHECK (NODE))

1286 1287 1288 1289 1290
/* OBJ_TYPE_REF accessors.  */
#define OBJ_TYPE_REF_EXPR(NODE)	  TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 0)
#define OBJ_TYPE_REF_OBJECT(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 1)
#define OBJ_TYPE_REF_TOKEN(NODE)  TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 2)

1291 1292 1293 1294
/* ASSERT_EXPR accessors.  */
#define ASSERT_EXPR_VAR(NODE)	TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 0)
#define ASSERT_EXPR_COND(NODE)	TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 1)

1295
struct tree_exp GTY(())
1296
{
1297
  struct tree_common common;
1298
  source_locus locus;
1299
  int complexity;
1300
  tree block;
1301 1302
  tree GTY ((special ("tree_exp"),
	     desc ("TREE_CODE ((tree) &%0)")))
1303
    operands[1];
1304 1305
};

1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326
/* SSA_NAME accessors.  */

/* Returns the variable being referenced.  Once released, this is the
   only field that can be relied upon.  */
#define SSA_NAME_VAR(NODE)	SSA_NAME_CHECK (NODE)->ssa_name.var

/* Returns the statement which defines this reference.   Note that
   we use the same field when chaining SSA_NAME nodes together on
   the SSA_NAME freelist.  */
#define SSA_NAME_DEF_STMT(NODE)	SSA_NAME_CHECK (NODE)->common.chain

/* Returns the SSA version number of this SSA name.  Note that in
   tree SSA, version numbers are not per variable and may be recycled.  */
#define SSA_NAME_VERSION(NODE)	SSA_NAME_CHECK (NODE)->ssa_name.version

/* Nonzero if this SSA name occurs in an abnormal PHI.  SSA_NAMES are
   never output, so we can safely use the ASM_WRITTEN_FLAG for this
   status bit.  */
#define SSA_NAME_OCCURS_IN_ABNORMAL_PHI(NODE) \
    SSA_NAME_CHECK (NODE)->common.asm_written_flag

1327
/* Nonzero if this SSA_NAME expression is currently on the free list of
1328 1329 1330 1331 1332
   SSA_NAMES.  Using NOTHROW_FLAG seems reasonably safe since throwing
   has no meaning for an SSA_NAME.  */
#define SSA_NAME_IN_FREE_LIST(NODE) \
    SSA_NAME_CHECK (NODE)->common.nothrow_flag

1333 1334 1335 1336
/* Attributes for SSA_NAMEs for pointer-type variables.  */
#define SSA_NAME_PTR_INFO(N) \
    SSA_NAME_CHECK (N)->ssa_name.ptr_info

Daniel Berlin committed
1337 1338 1339 1340
/* Get the value of this SSA_NAME, if available.  */
#define SSA_NAME_VALUE(N) \
   SSA_NAME_CHECK (N)->ssa_name.value_handle

1341 1342 1343 1344
/* Range information for SSA_NAMEs.  */
#define SSA_NAME_VALUE_RANGE(N) \
    SSA_NAME_CHECK (N)->ssa_name.value_range

1345 1346 1347
/* Auxiliary pass-specific data.  */
#define SSA_NAME_AUX(N) \
   SSA_NAME_CHECK (N)->ssa_name.aux
1348

1349 1350
#ifndef _TREE_FLOW_H
struct ptr_info_def;
1351
struct value_range_def;
1352 1353
#endif

1354 1355


1356
/* Immediate use linking structure.  This structure is used for maintaining
1357
   a doubly linked list of uses of an SSA_NAME.  */
1358
typedef struct ssa_use_operand_d GTY(())
1359
{
1360 1361
  struct ssa_use_operand_d* GTY((skip(""))) prev;
  struct ssa_use_operand_d* GTY((skip(""))) next;
1362 1363
  tree GTY((skip(""))) stmt;
  tree *GTY((skip(""))) use;
1364
} ssa_use_operand_t;
1365 1366 1367 1368

/* Return the immediate_use information for an SSA_NAME. */
#define SSA_NAME_IMM_USE_NODE(NODE) SSA_NAME_CHECK (NODE)->ssa_name.imm_uses

1369 1370 1371 1372 1373 1374 1375 1376 1377
struct tree_ssa_name GTY(())
{
  struct tree_common common;

  /* _DECL wrapped by this SSA name.  */
  tree var;

  /* SSA version number.  */
  unsigned int version;
1378 1379 1380

  /* Pointer attributes used for alias analysis.  */
  struct ptr_info_def *ptr_info;
Daniel Berlin committed
1381

1382 1383 1384 1385 1386 1387
  /* Value for SSA name used by various passes.

     Right now only invariants are allowed to persist beyond a pass in
     this field; in the future we will allow VALUE_HANDLEs to persist
     as well.  */
  tree value_handle;
1388

1389 1390 1391
  /* Value range information.  */
  struct value_range_def *value_range;

1392 1393
  /* Auxiliary information stored with the ssa name.  */
  PTR GTY((skip)) aux;
1394 1395

  /* Immediate uses list for this SSA_NAME.  */
1396
  struct ssa_use_operand_d imm_uses;
1397 1398 1399
};

/* In a PHI_NODE node.  */
1400 1401 1402 1403 1404

/* These 2 macros should be considered off limits for use by developers.  If 
   you wish to access the use or def fields of a PHI_NODE in the SSA 
   optimizers, use the accessor macros found in tree-ssa-operands.h.  
   These two macros are to be used only by those accessor macros, and other 
1405
   select places where we *absolutely* must take the address of the tree.  */
1406

1407 1408
#define PHI_RESULT_TREE(NODE)		PHI_NODE_CHECK (NODE)->phi.result
#define PHI_ARG_DEF_TREE(NODE, I)	PHI_NODE_ELT_CHECK (NODE, I).def
1409

1410 1411 1412 1413 1414
/* PHI_NODEs for each basic block are chained together in a single linked
   list.  The head of the list is linked from the block annotation, and
   the link to the next PHI is in PHI_CHAIN.  */
#define PHI_CHAIN(NODE)		TREE_CHAIN (PHI_NODE_CHECK (NODE))

1415 1416 1417
#define PHI_NUM_ARGS(NODE)		PHI_NODE_CHECK (NODE)->phi.num_args
#define PHI_ARG_CAPACITY(NODE)		PHI_NODE_CHECK (NODE)->phi.capacity
#define PHI_ARG_ELT(NODE, I)		PHI_NODE_ELT_CHECK (NODE, I)
1418
#define PHI_ARG_EDGE(NODE, I) 		(EDGE_PRED (PHI_BB ((NODE)), (I)))
1419
#define PHI_ARG_NONZERO(NODE, I) 	PHI_NODE_ELT_CHECK (NODE, I).nonzero
1420
#define PHI_BB(NODE)			PHI_NODE_CHECK (NODE)->phi.bb
1421
#define PHI_ARG_IMM_USE_NODE(NODE, I)	PHI_NODE_ELT_CHECK (NODE, I).imm_use
1422 1423 1424

struct phi_arg_d GTY(())
{
1425 1426
  /* imm_use MUST be the first element in struct because we do some
     pointer arithmetic with it.  See phi_arg_index_from_use.  */
1427
  struct ssa_use_operand_d imm_use;
1428
  tree def;
1429
  bool nonzero;
1430 1431 1432 1433 1434 1435 1436 1437 1438
};

struct tree_phi_node GTY(())
{
  struct tree_common common;
  tree result;
  int num_args;
  int capacity;

1439 1440 1441
  /* Basic block to that the phi node belongs.  */
  struct basic_block_def *bb;

1442 1443
  /* Arguments of the PHI node.  These are maintained in the same
     order as predecessor edge vector BB->PREDS.  */
1444
  struct phi_arg_d GTY ((length ("((tree)&%h)->phi.num_args"))) a[1];
1445 1446 1447 1448 1449
};


struct varray_head_tag;

Richard Stallman committed
1450
/* In a BLOCK node.  */
1451 1452 1453
#define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars)
#define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks)
#define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
Richard Stallman committed
1454 1455
/* Note: when changing this, make sure to find the places
   that use chainon or nreverse.  */
1456
#define BLOCK_CHAIN(NODE) TREE_CHAIN (BLOCK_CHECK (NODE))
1457 1458
#define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin)
#define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag)
Richard Stallman committed
1459 1460 1461

/* Nonzero means that this block is prepared to handle exceptions
   listed in the BLOCK_VARS slot.  */
1462 1463
#define BLOCK_HANDLER_BLOCK(NODE) \
  (BLOCK_CHECK (NODE)->block.handler_block_flag)
Richard Stallman committed
1464

1465 1466 1467 1468 1469
/* An index number for this block.  These values are not guaranteed to
   be unique across functions -- whether or not they are depends on
   the debugging output format in use.  */
#define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num)

1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488
/* If block reordering splits a lexical block into discontiguous
   address ranges, we'll make a copy of the original block.

   Note that this is logically distinct from BLOCK_ABSTRACT_ORIGIN.
   In that case, we have one source block that has been replicated
   (through inlining or unrolling) into many logical blocks, and that
   these logical blocks have different physical variables in them.

   In this case, we have one logical block split into several
   non-contiguous address ranges.  Most debug formats can't actually
   represent this idea directly, so we fake it by creating multiple
   logical blocks with the same variables in them.  However, for those
   that do support non-contiguous regions, these allow the original
   logical block to be reconstructed, along with the set of address
   ranges.

   One of the logical block fragments is arbitrarily chosen to be
   the ORIGIN.  The other fragments will point to the origin via
   BLOCK_FRAGMENT_ORIGIN; the origin itself will have this pointer
Kazu Hirata committed
1489
   be null.  The list of fragments will be chained through
1490 1491
   BLOCK_FRAGMENT_CHAIN from the origin.  */

1492 1493
#define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin)
#define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain)
1494

1495
struct tree_block GTY(())
Richard Stallman committed
1496
{
1497
  struct tree_common common;
1498 1499 1500

  unsigned handler_block_flag : 1;
  unsigned abstract_flag : 1;
1501
  unsigned block_num : 30;
1502

1503 1504 1505 1506 1507 1508
  tree vars;
  tree subblocks;
  tree supercontext;
  tree abstract_origin;
  tree fragment_origin;
  tree fragment_chain;
Richard Stallman committed
1509 1510 1511 1512 1513
};

/* Define fields and accessors for nodes representing data types.  */

/* See tree.def for documentation of the use of these fields.
1514 1515
   Look at the documentation of the various ..._TYPE tree codes.

1516
   Note that the type.values, type.minval, and type.maxval fields are
1517 1518 1519 1520
   overloaded and used for different macros in different kinds of types.
   Each macro must check to ensure the tree node is of the proper kind of
   type.  Note also that some of the front-ends also overload these fields,
   so they must be checked as well.  */
Richard Stallman committed
1521

1522 1523 1524 1525
#define TYPE_UID(NODE) (TYPE_CHECK (NODE)->type.uid)
#define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->type.size)
#define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit)
#define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode)
1526
#define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values)
1527
#define TYPE_DOMAIN(NODE) (ARRAY_TYPE_CHECK (NODE)->type.values)
1528
#define TYPE_FIELDS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.values)
1529 1530 1531 1532
#define TYPE_CACHED_VALUES(NODE) (TYPE_CHECK(NODE)->type.values)
#define TYPE_ORIG_SIZE_TYPE(NODE)			\
  (INTEGER_TYPE_CHECK (NODE)->type.values		\
  ? TREE_TYPE ((NODE)->type.values) : NULL_TREE)
1533 1534
#define TYPE_METHODS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.maxval)
#define TYPE_VFIELD(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.minval)
1535 1536 1537
#define TYPE_ARG_TYPES(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.values)
#define TYPE_METHOD_BASETYPE(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.maxval)
#define TYPE_OFFSET_BASETYPE(NODE) (OFFSET_TYPE_CHECK (NODE)->type.maxval)
1538 1539
#define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type.pointer_to)
#define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type.reference_to)
1540 1541
#define TYPE_NEXT_PTR_TO(NODE) (POINTER_TYPE_CHECK (NODE)->type.minval)
#define TYPE_NEXT_REF_TO(NODE) (REFERENCE_TYPE_CHECK (NODE)->type.minval)
1542 1543
#define TYPE_MIN_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.minval)
#define TYPE_MAX_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.maxval)
1544 1545 1546
#define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type.precision)
#define TYPE_SYMTAB_ADDRESS(NODE) (TYPE_CHECK (NODE)->type.symtab.address)
#define TYPE_SYMTAB_POINTER(NODE) (TYPE_CHECK (NODE)->type.symtab.pointer)
1547
#define TYPE_SYMTAB_DIE(NODE) (TYPE_CHECK (NODE)->type.symtab.die)
1548 1549 1550 1551 1552
#define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type.name)
#define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type.next_variant)
#define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant)
#define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context)
#define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->type.lang_specific)
Richard Stallman committed
1553

1554 1555 1556
/* For a VECTOR_TYPE node, this describes a different type which is emitted
   in the debugging output.  We use this to describe a vector as a
   structure containing an array.  */
1557
#define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (VECTOR_TYPE_CHECK (NODE)->type.values)
1558

1559
/* For record and union types, information about this type, as a base type
1560
   for itself.  */
1561 1562 1563 1564
#define TYPE_BINFO(NODE) (RECORD_OR_UNION_CHECK(NODE)->type.binfo)

/* For non record and union types, used in a language-dependent way.  */
#define TYPE_LANG_SLOT_1(NODE) (NOT_RECORD_OR_UNION_CHECK(NODE)->type.binfo)
1565

1566 1567 1568 1569 1570 1571 1572 1573 1574
/* The (language-specific) typed-based alias set for this type.
   Objects whose TYPE_ALIAS_SETs are different cannot alias each
   other.  If the TYPE_ALIAS_SET is -1, no alias set has yet been
   assigned to this type.  If the TYPE_ALIAS_SET is 0, objects of this
   type can alias objects of any type.  */
#define TYPE_ALIAS_SET(NODE) (TYPE_CHECK (NODE)->type.alias_set)

/* Nonzero iff the typed-based alias set for this type has been
   calculated.  */
1575
#define TYPE_ALIAS_SET_KNOWN_P(NODE) (TYPE_CHECK (NODE)->type.alias_set != -1)
1576

1577 1578
/* A TREE_LIST of IDENTIFIER nodes of the attributes that apply
   to this type.  */
1579
#define TYPE_ATTRIBUTES(NODE) (TYPE_CHECK (NODE)->type.attributes)
1580

1581 1582
/* The alignment necessary for objects of this type.
   The value is an int, measured in bits.  */
1583
#define TYPE_ALIGN(NODE) (TYPE_CHECK (NODE)->type.align)
1584

1585 1586 1587 1588
/* 1 if the alignment for this type was requested by "aligned" attribute,
   0 if it is the default for this type.  */
#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align)

1589
/* The alignment for NODE, in bytes.  */
1590
#define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
1591

1592 1593 1594 1595 1596 1597
/* If your language allows you to declare types, and you want debug info
   for them, then you need to generate corresponding TYPE_DECL nodes.
   These "stub" TYPE_DECL nodes have no name, and simply point at the
   type node.  You then set the TYPE_STUB_DECL field of the type node
   to point back at the TYPE_DECL node.  This allows the debug routines
   to know that the two nodes represent the same type, so that we only
1598
   get one debug info record for them.  */
1599
#define TYPE_STUB_DECL(NODE) TREE_CHAIN (NODE)
Richard Stallman committed
1600

1601 1602 1603
/* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type
   has BLKmode only because it lacks the alignment requirement for
   its size.  */
1604
#define TYPE_NO_FORCE_BLK(NODE) (TYPE_CHECK (NODE)->type.no_force_blk_flag)
Richard Stallman committed
1605

1606 1607 1608 1609 1610 1611 1612 1613
/* In an INTEGER_TYPE, it means the type represents a size.  We use
   this both for validity checking and to permit optimizations that
   are unsafe for other types.  Note that the C `size_t' type should
   *not* have this flag set.  The `size_t' type is simply a typedef
   for an ordinary integer type that happens to be the type of an
   expression returned by `sizeof'; `size_t' has no special
   properties.  Expressions whose type have TYPE_IS_SIZETYPE set are
   always actual sizes.  */
1614 1615 1616 1617 1618 1619
#define TYPE_IS_SIZETYPE(NODE) \
  (INTEGER_TYPE_CHECK (NODE)->type.no_force_blk_flag)

/* In a FUNCTION_TYPE, indicates that the function returns with the stack
   pointer depressed.  */
#define TYPE_RETURNS_STACK_DEPRESSED(NODE) \
1620
  (FUNCTION_TYPE_CHECK (NODE)->type.no_force_blk_flag)
1621

Richard Stallman committed
1622
/* Nonzero in a type considered volatile as a whole.  */
1623
#define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->common.volatile_flag)
Richard Stallman committed
1624 1625

/* Means this type is const-qualified.  */
1626
#define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->common.readonly_flag)
Richard Stallman committed
1627

1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641
/* If nonzero, this type is `restrict'-qualified, in the C sense of
   the term.  */
#define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag)

/* There is a TYPE_QUAL value for each type qualifier.  They can be
   combined by bitwise-or to form the complete set of qualifiers for a
   type.  */

#define TYPE_UNQUALIFIED   0x0
#define TYPE_QUAL_CONST    0x1
#define TYPE_QUAL_VOLATILE 0x2
#define TYPE_QUAL_RESTRICT 0x4

/* The set of type qualifiers for this type.  */
1642 1643 1644
#define TYPE_QUALS(NODE)					\
  ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)			\
   | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)		\
1645
   | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT))
1646

1647
/* These flags are available for each language front end to use internally.  */
1648 1649 1650 1651 1652 1653 1654
#define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type.lang_flag_0)
#define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->type.lang_flag_1)
#define TYPE_LANG_FLAG_2(NODE) (TYPE_CHECK (NODE)->type.lang_flag_2)
#define TYPE_LANG_FLAG_3(NODE) (TYPE_CHECK (NODE)->type.lang_flag_3)
#define TYPE_LANG_FLAG_4(NODE) (TYPE_CHECK (NODE)->type.lang_flag_4)
#define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->type.lang_flag_5)
#define TYPE_LANG_FLAG_6(NODE) (TYPE_CHECK (NODE)->type.lang_flag_6)
Richard Stallman committed
1655

1656 1657 1658 1659
/* Used to keep track of visited nodes in tree traversals.  This is set to
   0 by copy_node and make_node.  */
#define TREE_VISITED(NODE) ((NODE)->common.visited)

1660 1661
/* If set in an ARRAY_TYPE, indicates a string type (for languages
   that distinguish string from array of char).
1662
   If set in a SET_TYPE, indicates a bitstring type.  */
1663
#define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag)
1664

1665
/* If non-NULL, this is an upper bound of the size (in bytes) of an
1666 1667 1668
   object of the given ARRAY_TYPE.  This allows temporaries to be
   allocated.  */
#define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) \
1669
  (ARRAY_TYPE_CHECK (ARRAY_TYPE)->type.maxval)
1670

1671
/* For a VECTOR_TYPE, this is the number of sub-parts of the vector.  */
1672
#define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \
1673
  (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.precision)
1674

1675
/* Indicates that objects of this type must be initialized by calling a
1676
   function when they are created.  */
1677 1678
#define TYPE_NEEDS_CONSTRUCTING(NODE) \
  (TYPE_CHECK (NODE)->type.needs_constructing_flag)
1679

1680 1681
/* Indicates that objects of this type (a UNION_TYPE), should be passed
   the same way that the first union alternative would be passed.  */
1682 1683 1684 1685 1686 1687 1688
#define TYPE_TRANSPARENT_UNION(NODE)  \
  (UNION_TYPE_CHECK (NODE)->type.transparent_union_flag)

/* For an ARRAY_TYPE, indicates that it is not permitted to
   take the address of a component of the type.  */
#define TYPE_NONALIASED_COMPONENT(NODE) \
  (ARRAY_TYPE_CHECK (NODE)->type.transparent_union_flag)
1689

Jeff Law committed
1690
/* Indicated that objects of this type should be laid out in as
1691
   compact a way as possible.  */
1692
#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->type.packed_flag)
1693

1694 1695 1696 1697 1698 1699
/* Used by type_contains_placeholder_p to avoid recomputation.
   Values are: 0 (unknown), 1 (false), 2 (true).  Never access
   this field directly.  */
#define TYPE_CONTAINS_PLACEHOLDER_INTERNAL(NODE) \
  (TYPE_CHECK (NODE)->type.contains_placeholder_bits)

1700 1701 1702
struct die_struct;

struct tree_type GTY(())
Richard Stallman committed
1703
{
1704
  struct tree_common common;
1705 1706 1707 1708
  tree values;
  tree size;
  tree size_unit;
  tree attributes;
1709
  unsigned int uid;
Richard Stallman committed
1710

1711
  unsigned int precision : 9;
1712
  ENUM_BITFIELD(machine_mode) mode : 7;
1713

1714
  unsigned string_flag : 1;
Richard Stallman committed
1715
  unsigned no_force_blk_flag : 1;
1716
  unsigned needs_constructing_flag : 1;
1717
  unsigned transparent_union_flag : 1;
1718
  unsigned packed_flag : 1;
1719
  unsigned restrict_flag : 1;
1720
  unsigned contains_placeholder_bits : 2;
1721

Richard Stallman committed
1722 1723 1724 1725 1726 1727 1728
  unsigned lang_flag_0 : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;
  unsigned lang_flag_5 : 1;
  unsigned lang_flag_6 : 1;
1729
  unsigned user_align : 1;
Richard Stallman committed
1730

1731
  unsigned int align;
1732 1733
  tree pointer_to;
  tree reference_to;
1734
  union tree_type_symtab {
1735 1736
    int GTY ((tag ("0"))) address;
    char * GTY ((tag ("1"))) pointer;
1737
    struct die_struct * GTY ((tag ("2"))) die;
1738
  } GTY ((desc ("debug_hooks == &sdb_debug_hooks ? 1 : debug_hooks == &dwarf2_debug_hooks ? 2 : 0"),
1739
	  descbits ("2"))) symtab;
1740 1741 1742 1743 1744 1745 1746
  tree name;
  tree minval;
  tree maxval;
  tree next_variant;
  tree main_variant;
  tree binfo;
  tree context;
1747
  HOST_WIDE_INT alias_set;
Richard Stallman committed
1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766
  /* Points to a structure whose details depend on the language in use.  */
  struct lang_type *lang_specific;
};

/* Define accessor macros for information about type inheritance
   and basetypes.

   A "basetype" means a particular usage of a data type for inheritance
   in another type.  Each such basetype usage has its own "binfo"
   object to describe it.  The binfo object is a TREE_VEC node.

   Inheritance is represented by the binfo nodes allocated for a
   given type.  For example, given types C and D, such that D is
   inherited by C, 3 binfo nodes will be allocated: one for describing
   the binfo properties of C, similarly one for D, and one for
   describing the binfo properties of D as a base type for C.
   Thus, given a pointer to class C, one can get a pointer to the binfo
   of D acting as a basetype for C by looking at C's binfo's basetypes.  */

1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780
/* BINFO specific flags.  */

/* Nonzero means that the derivation chain is via a `virtual' declaration.  */
#define BINFO_VIRTUAL_P(NODE) (TREE_BINFO_CHECK (NODE)->common.static_flag)

/* Flags for language dependent use.  */
#define BINFO_MARKED(NODE) TREE_LANG_FLAG_0(TREE_BINFO_CHECK(NODE))
#define BINFO_FLAG_1(NODE) TREE_LANG_FLAG_1(TREE_BINFO_CHECK(NODE))
#define BINFO_FLAG_2(NODE) TREE_LANG_FLAG_2(TREE_BINFO_CHECK(NODE))
#define BINFO_FLAG_3(NODE) TREE_LANG_FLAG_3(TREE_BINFO_CHECK(NODE))
#define BINFO_FLAG_4(NODE) TREE_LANG_FLAG_4(TREE_BINFO_CHECK(NODE))
#define BINFO_FLAG_5(NODE) TREE_LANG_FLAG_5(TREE_BINFO_CHECK(NODE))
#define BINFO_FLAG_6(NODE) TREE_LANG_FLAG_6(TREE_BINFO_CHECK(NODE))

Richard Stallman committed
1781
/* The actual data type node being inherited in this basetype.  */
1782
#define BINFO_TYPE(NODE) TREE_TYPE (TREE_BINFO_CHECK(NODE))
Richard Stallman committed
1783 1784 1785 1786 1787 1788

/* The offset where this basetype appears in its containing type.
   BINFO_OFFSET slot holds the offset (in bytes)
   from the base of the complete object to the base of the part of the
   object that is allocated on behalf of this `type'.
   This is always 0 except when there is multiple inheritance.  */
Kazu Hirata committed
1789

1790
#define BINFO_OFFSET(NODE) (TREE_BINFO_CHECK(NODE)->binfo.offset)
1791
#define BINFO_OFFSET_ZEROP(NODE) (integer_zerop (BINFO_OFFSET (NODE)))
Richard Stallman committed
1792 1793 1794 1795 1796

/* The virtual function table belonging to this basetype.  Virtual
   function tables provide a mechanism for run-time method dispatching.
   The entries of a virtual function table are language-dependent.  */

1797
#define BINFO_VTABLE(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtable)
Richard Stallman committed
1798 1799 1800 1801

/* The virtual functions in the virtual function table.  This is
   a TREE_LIST that is used as an initial approximation for building
   a virtual function table for this basetype.  */
1802
#define BINFO_VIRTUALS(NODE) (TREE_BINFO_CHECK(NODE)->binfo.virtuals)
Richard Stallman committed
1803

1804 1805
/* A vector of binfos for the direct basetypes inherited by this
   basetype.
Richard Stallman committed
1806

1807 1808
   If this basetype describes type D as inherited in C, and if the
   basetypes of D are E and F, then this vector contains binfos for
Nathan Sidwell committed
1809 1810
   inheritance of E and F by C.  */
#define BINFO_BASE_BINFOS(NODE) (&TREE_BINFO_CHECK(NODE)->binfo.base_binfos)
Richard Stallman committed
1811

1812
/* The number of basetypes for NODE.  */
Nathan Sidwell committed
1813
#define BINFO_N_BASE_BINFOS(NODE) (VEC_length (tree, BINFO_BASE_BINFOS (NODE)))
1814

1815
/* Accessor macro to get to the Nth base binfo of this binfo.  */
Nathan Sidwell committed
1816 1817 1818 1819 1820 1821
#define BINFO_BASE_BINFO(NODE,N) \
 (VEC_index (tree, BINFO_BASE_BINFOS (NODE), (N)))
#define BINFO_BASE_ITERATE(NODE,N,B) \
 (VEC_iterate (tree, BINFO_BASE_BINFOS (NODE), (N), (B)))
#define BINFO_BASE_APPEND(NODE,T) \
 (VEC_quick_push (tree, BINFO_BASE_BINFOS (NODE), (T)))
1822

1823 1824
/* For a BINFO record describing a virtual base class, i.e., one where
   TREE_VIA_VIRTUAL is set, this field assists in locating the virtual
1825 1826 1827
   base.  The actual contents are language-dependent.  In the C++
   front-end this field is an INTEGER_CST giving an offset into the
   vtable where the offset to the virtual base can be found.  */
1828
#define BINFO_VPTR_FIELD(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vptr_field)
1829

1830 1831 1832
/* Indicates the accesses this binfo has to its bases. The values are
   access_public_node, access_protected_node or access_private_node.
   If this array is not present, public access is implied.  */
1833
#define BINFO_BASE_ACCESSES(NODE) (TREE_BINFO_CHECK(NODE)->binfo.base_accesses)
1834 1835 1836 1837 1838

#define BINFO_BASE_ACCESS(NODE,N) \
  VEC_index (tree, BINFO_BASE_ACCESSES (NODE), (N))
#define BINFO_BASE_ACCESS_APPEND(NODE,T) \
  VEC_quick_push (tree, BINFO_BASE_ACCESSES (NODE), (T))
1839

Nathan Sidwell committed
1840 1841 1842
/* The index in the VTT where this subobject's sub-VTT can be found.
   NULL_TREE if there is no sub-VTT.  */
#define BINFO_SUBVTT_INDEX(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtt_subvtt)
1843

Nathan Sidwell committed
1844 1845 1846 1847
/* The index in the VTT where the vptr for this subobject can be
   found.  NULL_TREE if there is no secondary vptr in the VTT.  */
#define BINFO_VPTR_INDEX(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtt_vptr)

1848 1849
/* The BINFO_INHERITANCE_CHAIN points at the binfo for the base
   inheriting this base for non-virtual bases. For virtual bases it
1850 1851
   points either to the binfo for which this is a primary binfo, or to
   the binfo of the most derived type.  */
1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862
#define BINFO_INHERITANCE_CHAIN(NODE) \
	(TREE_BINFO_CHECK(NODE)->binfo.inheritance)

struct tree_binfo GTY (())
{
  struct tree_common common;

  tree offset;
  tree vtable;
  tree virtuals;
  tree vptr_field;
1863
  VEC(tree,gc) *base_accesses;
1864 1865
  tree inheritance;

Nathan Sidwell committed
1866 1867 1868
  tree vtt_subvtt;
  tree vtt_vptr;

1869
  VEC(tree,none) base_binfos;
1870 1871
};

Richard Stallman committed
1872 1873 1874

/* Define fields and accessors for nodes representing declared names.  */

1875 1876 1877 1878 1879 1880 1881 1882 1883 1884
/* Nonzero if DECL represents a variable for the SSA passes.  */
#define SSA_VAR_P(DECL) \
	(TREE_CODE (DECL) == VAR_DECL	\
	 || TREE_CODE (DECL) == PARM_DECL \
	 || TREE_CODE (DECL) == RESULT_DECL \
	 || (TREE_CODE (DECL) == SSA_NAME \
	     && (TREE_CODE (SSA_NAME_VAR (DECL)) == VAR_DECL \
		 || TREE_CODE (SSA_NAME_VAR (DECL)) == PARM_DECL \
		 || TREE_CODE (SSA_NAME_VAR (DECL)) == RESULT_DECL)))

Richard Stallman committed
1885 1886
/* This is the name of the object as written by the user.
   It is an IDENTIFIER_NODE.  */
1887
#define DECL_NAME(NODE) (DECL_CHECK (NODE)->decl.name)
1888

1889 1890 1891
/* The name of the object as the assembler will see it (but before any
   translations made by ASM_OUTPUT_LABELREF).  Often this is the same
   as DECL_NAME.  It is an IDENTIFIER_NODE.  */
1892
#define DECL_ASSEMBLER_NAME(NODE) decl_assembler_name (NODE)
1893

1894
/* Returns nonzero if the DECL_ASSEMBLER_NAME for NODE has been set.  If zero,
1895 1896
   the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set
   yet.  */
1897 1898
#define DECL_ASSEMBLER_NAME_SET_P(NODE) \
  (DECL_CHECK (NODE)->decl.assembler_name != NULL_TREE)
1899

1900 1901 1902
/* Set the DECL_ASSEMBLER_NAME for NODE to NAME.  */
#define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
  (DECL_CHECK (NODE)->decl.assembler_name = (NAME))
1903 1904 1905 1906 1907

/* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2.  Note that if DECL1's
   DECL_ASSEMBLER_NAME has not yet been set, using this macro will not cause
   the DECL_ASSEMBLER_NAME of either DECL to be set.  In other words, the
   semantics of using this macro, are different than saying:
Kazu Hirata committed
1908

1909 1910 1911
     SET_DECL_ASSEMBLER_NAME(DECL2, DECL_ASSEMBLER_NAME (DECL1))

   which will try to set the DECL_ASSEMBLER_NAME for DECL1.  */
1912

1913 1914
#define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2)				\
  (DECL_ASSEMBLER_NAME_SET_P (DECL1)					\
Kazu Hirata committed
1915 1916
   ? (void) SET_DECL_ASSEMBLER_NAME (DECL2,				\
				     DECL_ASSEMBLER_NAME (DECL1))	\
1917 1918
   : (void) 0)

1919 1920
/* Records the section name in a section attribute.  Used to pass
   the name from decl_attributes to make_function_rtl and make_decl_rtl.  */
1921
#define DECL_SECTION_NAME(NODE) (DECL_CHECK (NODE)->decl.section_name)
1922

Geoffrey Keating committed
1923 1924 1925 1926 1927 1928 1929
/*  For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or
    QUAL_UNION_TYPE node that the field is a member of.  For VAR_DECL,
    PARM_DECL, FUNCTION_DECL, LABEL_DECL, and CONST_DECL nodes, this
    points to either the FUNCTION_DECL for the containing function,
    the RECORD_TYPE or UNION_TYPE for the containing type, or
    NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file
    scope".  */
1930
#define DECL_CONTEXT(NODE) (DECL_CHECK (NODE)->decl.context)
1931
#define DECL_FIELD_CONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.context)
Joseph Myers committed
1932 1933
/* In a DECL this is the field where attributes are stored.  */
#define DECL_ATTRIBUTES(NODE) (DECL_CHECK (NODE)->decl.attributes)
1934 1935 1936 1937 1938 1939
/* In a FIELD_DECL, this is the field position, counting in bytes, of the
   byte containing the bit closest to the beginning of the structure.  */
#define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.arguments)
/* In a FIELD_DECL, this is the offset, in bits, of the first bit of the
   field from DECL_FIELD_OFFSET.  */
#define DECL_FIELD_BIT_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.u2.t)
Richard Stallman committed
1940
/* In a FIELD_DECL, this indicates whether the field was a bit-field and
1941 1942
   if so, the type that was originally specified for it.
   TREE_TYPE may have been modified (in finish_struct).  */
1943
#define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->decl.result)
1944 1945 1946
/* In FUNCTION_DECL, a chain of ..._DECL nodes.
   VAR_DECL and PARM_DECL reserve the arguments slot for language-specific
   uses.  */
1947
#define DECL_ARGUMENTS(NODE) (DECL_CHECK (NODE)->decl.arguments)
1948 1949 1950
/* This field is used to reference anything in decl.result and is meant only
   for use by the garbage collector.  */
#define DECL_RESULT_FLD(NODE) (DECL_CHECK (NODE)->decl.result)
Richard Stallman committed
1951
/* In FUNCTION_DECL, holds the decl for the return value.  */
1952
#define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.result)
1953
/* For a TYPE_DECL, holds the "original" type.  (TREE_TYPE has the copy.) */
1954
#define DECL_ORIGINAL_TYPE(NODE) (TYPE_DECL_CHECK (NODE)->decl.result)
Richard Stallman committed
1955
/* In PARM_DECL, holds the type as written (perhaps a function or array).  */
1956
#define DECL_ARG_TYPE_AS_WRITTEN(NODE) (PARM_DECL_CHECK (NODE)->decl.result)
Richard Stallman committed
1957
/* For a FUNCTION_DECL, holds the tree of BINDINGs.
Geoffrey Keating committed
1958
   For a TRANSLATION_UNIT_DECL, holds the namespace's BLOCK.
Richard Stallman committed
1959 1960 1961
   For a VAR_DECL, holds the initial value.
   For a PARM_DECL, not used--default
   values for parameters are encoded in the type of the function,
1962 1963 1964
   not in the PARM_DECL slot.

   ??? Need to figure out some way to check this isn't a PARM_DECL.  */
1965
#define DECL_INITIAL(NODE) (DECL_CHECK (NODE)->decl.initial)
Richard Stallman committed
1966 1967
/* For a PARM_DECL, records the data type used to pass the argument,
   which may be different from the type seen in the program.  */
1968
#define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl.initial)
1969 1970
/* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which
   if nonzero, indicates that the field occupies the type.  */
1971
#define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->decl.initial)
1972 1973 1974 1975 1976
/* These two fields describe where in the source code the declaration
   was.  If the declaration appears in several places (as for a C
   function that is declared first and then defined later), this
   information should refer to the definition.  */
#define DECL_SOURCE_LOCATION(NODE) (DECL_CHECK (NODE)->decl.locus)
1977 1978
#define DECL_SOURCE_FILE(NODE) LOCATION_FILE (DECL_SOURCE_LOCATION (NODE))
#define DECL_SOURCE_LINE(NODE) LOCATION_LINE (DECL_SOURCE_LOCATION (NODE))
1979
#ifdef USE_MAPPED_LOCATION
1980 1981 1982 1983 1984
#define DECL_IS_BUILTIN(DECL) \
  (DECL_SOURCE_LOCATION (DECL) <= BUILTINS_LOCATION)
#else
#define DECL_IS_BUILTIN(DECL) (DECL_SOURCE_LINE(DECL) == 0)
#endif
1985
/* Holds the size of the datum, in bits, as a tree expression.
Richard Stallman committed
1986
   Need not be constant.  */
1987
#define DECL_SIZE(NODE) (DECL_CHECK (NODE)->decl.size)
1988 1989
/* Likewise for the size in bytes.  */
#define DECL_SIZE_UNIT(NODE) (DECL_CHECK (NODE)->decl.size_unit)
1990
/* Holds the alignment required for the datum, in bits.  */
1991
#define DECL_ALIGN(NODE) (DECL_CHECK (NODE)->decl.u1.a.align)
1992 1993
/* The alignment of NODE, in bytes.  */
#define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
1994 1995 1996 1997 1998 1999 2000 2001 2002
/* For FIELD_DECLs, off_align holds the number of low-order bits of
   DECL_FIELD_OFFSET which are known to be always zero.
   DECL_OFFSET_ALIGN thus returns the alignment that DECL_FIELD_OFFSET
   has.  */
#define DECL_OFFSET_ALIGN(NODE) \
  (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align)
/* Specify that DECL_ALIGN(NODE) is a multiple of X.  */
#define SET_DECL_OFFSET_ALIGN(NODE, X) \
  (FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align	= exact_log2 ((X) & -(X)))
2003 2004 2005
/* 1 if the alignment for this type was requested by "aligned" attribute,
   0 if it is the default for this type.  */
#define DECL_USER_ALIGN(NODE) (DECL_CHECK (NODE)->decl.user_align)
2006 2007 2008
/* Holds the machine mode corresponding to the declaration of a variable or
   field.  Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
   FIELD_DECL.  */
2009
#define DECL_MODE(NODE) (DECL_CHECK (NODE)->decl.mode)
2010
/* Holds the RTL expression for the value of a variable or function.
2011 2012 2013 2014 2015
   This value can be evaluated lazily for functions, variables with
   static storage duration, and labels.  */
#define DECL_RTL(NODE)					\
  (DECL_CHECK (NODE)->decl.rtl				\
   ? (NODE)->decl.rtl					\
2016
   : (make_decl_rtl (NODE), (NODE)->decl.rtl))
2017
/* Set the DECL_RTL for NODE to RTL.  */
2018
#define SET_DECL_RTL(NODE, RTL) set_decl_rtl (NODE, RTL)
2019
/* Returns nonzero if the DECL_RTL for NODE has already been set.  */
2020
#define DECL_RTL_SET_P(NODE)  (DECL_CHECK (NODE)->decl.rtl != NULL)
2021 2022 2023 2024 2025
/* Copy the RTL from NODE1 to NODE2.  If the RTL was not set for
   NODE1, it will not be set for NODE2; this is a lazy copy.  */
#define COPY_DECL_RTL(NODE1, NODE2) \
  (DECL_CHECK (NODE2)->decl.rtl = DECL_CHECK (NODE1)->decl.rtl)
/* The DECL_RTL for NODE, if it is set, or NULL, if it is not set.  */
2026 2027
#define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)

Richard Stallman committed
2028 2029
/* For PARM_DECL, holds an RTL for the stack slot or register
   where the data was actually passed.  */
2030
#define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->decl.u2.r)
2031

2032 2033 2034
/* For FUNCTION_DECL, this holds a pointer to a structure ("struct function")
   that describes the status of this function.  */
#define DECL_STRUCT_FUNCTION(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u2.f)
2035

2036 2037 2038 2039
/* For FUNCTION_DECL, if it is built-in, this identifies which built-in
   operation it is.  Note, however, that this field is overloaded, with
   DECL_BUILT_IN_CLASS as the discriminant, so the latter must always be
   checked before any access to the former.  */
2040
#define DECL_FUNCTION_CODE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u1.f)
Richard Stallman committed
2041 2042 2043 2044 2045 2046 2047 2048

/* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways.
   Before the struct containing the FUNCTION_DECL is laid out,
   DECL_VINDEX may point to a FUNCTION_DECL in a base class which
   is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual
   function.  When the class is laid out, this pointer is changed
   to an INTEGER_CST node which is suitable for use as an index
   into the virtual function table.  */
2049
#define DECL_VINDEX(NODE) (DECL_CHECK (NODE)->decl.vindex)
2050

Richard Stallman committed
2051 2052 2053
/* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in
   which this FIELD_DECL is defined.  This information is needed when
   writing debugging information about vfield and vbase decls for C++.  */
2054
#define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.vindex)
Richard Stallman committed
2055

2056 2057 2058 2059 2060 2061 2062
/* For VAR_DECL, this is set to either an expression that it was split
   from (if DECL_DEBUG_EXPR_IS_FROM is true), otherwise a tree_list of
   subexpressions that it was split into.  */
#define DECL_DEBUG_EXPR(NODE) (DECL_CHECK (NODE)->decl.vindex)

#define DECL_DEBUG_EXPR_IS_FROM(NODE) \
  (DECL_CHECK (NODE)->decl.debug_expr_is_from)
2063

2064
/* Every ..._DECL node gets a unique number.  */
2065
#define DECL_UID(NODE) (DECL_CHECK (NODE)->decl.uid)
2066

2067 2068
/* For any sort of a ..._DECL node, this points to the original (abstract)
   decl node which this decl is an instance of, or else it is NULL indicating
2069 2070 2071
   that this decl is not an instance of some other decl.  For example,
   in a nested declaration of an inline function, this points back to the
   definition.  */
2072
#define DECL_ABSTRACT_ORIGIN(NODE) (DECL_CHECK (NODE)->decl.abstract_origin)
2073

2074 2075 2076
/* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract
   origin.  This is useful when setting the DECL_ABSTRACT_ORIGIN.  */
#define DECL_ORIGIN(NODE) \
2077
  (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE))
2078

2079 2080 2081
/* Nonzero for any sort of ..._DECL node means this decl node represents an
   inline instance of some original (abstract) decl from an inline function;
   suppress any warnings about shadowing some other variable.  FUNCTION_DECL
2082
   nodes can also have their abstract origin set to themselves.  */
2083
#define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \
2084
				&& DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
Richard Stallman committed
2085

2086 2087
/* Nonzero for a given ..._DECL node means that the name of this node should
   be ignored for symbolic debug purposes.  */ 
2088
#define DECL_IGNORED_P(NODE) (DECL_CHECK (NODE)->decl.ignored_flag)
Richard Stallman committed
2089

2090 2091 2092
/* Nonzero for a given ..._DECL node means that this node represents an
   "abstract instance" of the given declaration (e.g. in the original
   declaration of an inline function).  When generating symbolic debugging
Richard Kenner committed
2093
   information, we mustn't try to generate any address information for nodes
2094 2095
   marked as "abstract instances" because we don't actually generate
   any code or allocate any data space for such instances.  */
2096
#define DECL_ABSTRACT(NODE) (DECL_CHECK (NODE)->decl.abstract_flag)
2097

2098 2099
/* Nonzero for a given ..._DECL node means that no warnings should be
   generated just because this node is unused.  */
2100 2101
#define DECL_IN_SYSTEM_HEADER(NODE) \
  (DECL_CHECK (NODE)->decl.in_system_header_flag)
2102

2103 2104 2105
/* Nonzero for a given ..._DECL node means that this node should be
   put in .common, if possible.  If a DECL_INITIAL is given, and it
   is not error_mark_node, then the decl cannot be put in .common.  */
2106
#define DECL_COMMON(NODE) (DECL_CHECK (NODE)->decl.common_flag)
2107

2108
/* Language-specific decl information.  */
2109
#define DECL_LANG_SPECIFIC(NODE) (DECL_CHECK (NODE)->decl.lang_specific)
Richard Stallman committed
2110 2111 2112 2113

/* In a VAR_DECL or FUNCTION_DECL,
   nonzero means external reference:
   do not allocate storage, and refer to a definition elsewhere.  */
2114
#define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag)
Richard Stallman committed
2115

2116
/* In a VAR_DECL for a RECORD_TYPE, sets number for non-init_priority
2117
   initializations.  */
2118 2119
#define DEFAULT_INIT_PRIORITY 65535
#define MAX_INIT_PRIORITY 65535
2120
#define MAX_RESERVED_INIT_PRIORITY 100
2121

2122 2123
/* In a TYPE_DECL
   nonzero means the detail info about this type is not dumped into stabs.
Kazu Hirata committed
2124
   Instead it will generate cross reference ('x') of names.
2125
   This uses the same flag as DECL_EXTERNAL.  */
2126
#define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
2127
  (TYPE_DECL_CHECK (NODE)->decl.external_flag)
2128

2129
/* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'.  */
2130
#define DECL_REGISTER(NODE) (DECL_CHECK (NODE)->decl.regdecl_flag)
2131

2132 2133
/* In LABEL_DECL nodes, nonzero means that an error message about
   jumping into such a binding contour has been printed for this label.  */
2134
#define DECL_ERROR_ISSUED(NODE) (LABEL_DECL_CHECK (NODE)->decl.regdecl_flag)
2135

2136
/* In a FIELD_DECL, indicates this field should be bit-packed.  */
2137
#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl.regdecl_flag)
2138

2139
/* In a FUNCTION_DECL with a nonzero DECL_CONTEXT, indicates that a
2140
   static chain is not needed.  */
2141
#define DECL_NO_STATIC_CHAIN(NODE) \
2142
  (FUNCTION_DECL_CHECK (NODE)->decl.regdecl_flag)
Richard Stallman committed
2143 2144 2145 2146 2147 2148 2149 2150

/* Nonzero in a ..._DECL means this variable is ref'd from a nested function.
   For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes.

   For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted.

   Also set in some languages for variables, etc., outside the normal
   lexical scope, such as class instance variables.  */
2151
#define DECL_NONLOCAL(NODE) (DECL_CHECK (NODE)->decl.nonlocal_flag)
Richard Stallman committed
2152 2153 2154

/* Nonzero in a FUNCTION_DECL means this function can be substituted
   where it is called.  */
2155
#define DECL_INLINE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inline_flag)
Richard Stallman committed
2156

2157 2158 2159 2160 2161 2162
/* Nonzero in a FUNCTION_DECL means that this function was declared inline,
   such as via the `inline' keyword in C/C++.  This flag controls the linkage
   semantics of 'inline'; whether or not the function is inlined is
   controlled by DECL_INLINE.  */
#define DECL_DECLARED_INLINE_P(NODE) \
  (FUNCTION_DECL_CHECK (NODE)->decl.declared_inline_flag)
2163

2164 2165 2166 2167 2168
/* Nonzero in a decl means that the gimplifier has seen (or placed)
   this variable in a BIND_EXPR.  */
#define DECL_SEEN_IN_BIND_EXPR_P(NODE) \
  (DECL_CHECK (NODE)->decl.seen_in_bind_expr)

2169 2170
/* In a VAR_DECL, nonzero if the decl is a register variable with
   an explicit asm specification.  */
2171
#define DECL_HARD_REGISTER(NODE)  (VAR_DECL_CHECK (NODE)->decl.inline_flag)
2172

2173 2174 2175
/* Value of the decls's visibility attribute */
#define DECL_VISIBILITY(NODE) (DECL_CHECK (NODE)->decl.visibility)

2176 2177 2178 2179
/* Nonzero means that the decl had its visibility specified rather than
   being inferred.  */
#define DECL_VISIBILITY_SPECIFIED(NODE) (DECL_CHECK (NODE)->decl.visibility_specified)

2180 2181 2182
/* In a FUNCTION_DECL, nonzero if the function cannot be inlined.  */
#define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.uninlinable)

Kazu Hirata committed
2183
/* In a VAR_DECL, nonzero if the data should be allocated from
2184 2185 2186
   thread-local storage.  */
#define DECL_THREAD_LOCAL(NODE) (VAR_DECL_CHECK (NODE)->decl.thread_local_flag)

2187
/* In a FUNCTION_DECL, the saved representation of the body of the
2188
   entire function.  */
2189 2190
#define DECL_SAVED_TREE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.saved_tree)

2191 2192 2193 2194 2195 2196 2197
/* In a VAR_DECL or PARM_DECL, the location at which the value may be found,
   if transformations have made this more complicated than evaluating the
   decl itself.  This should only be used for debugging; once this field has
   been set, the decl itself may not legitimately appear in the function.  */
#define DECL_VALUE_EXPR(NODE) \
  (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl.saved_tree)

2198 2199 2200
/* Nonzero in a FUNCTION_DECL means this function should be treated
   as if it were a malloc, meaning it returns a pointer that is
   not an alias.  */
2201
#define DECL_IS_MALLOC(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.malloc_flag)
2202

2203 2204 2205 2206 2207
/* Nonzero in a FUNCTION_DECL means this function may return more
   than once.  */
#define DECL_IS_RETURNS_TWICE(NODE) \
  (FUNCTION_DECL_CHECK (NODE)->decl.returns_twice_flag)

2208 2209 2210 2211
/* Nonzero in a FUNCTION_DECL means this function should be treated
   as "pure" function (like const function, but may read global memory).  */
#define DECL_IS_PURE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.pure_flag)

2212 2213 2214 2215 2216
/* Nonzero in a FUNCTION_DECL means this function should be treated
   as "novops" function (function that does not read global memory,
   but may have arbitrary side effects).  */
#define DECL_IS_NOVOPS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.novops_flag)
     
Richard Stallman committed
2217 2218
/* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed
   specially.  */
2219
#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl.bit_field_flag)
2220

2221
/* Unused in FUNCTION_DECL.  */
2222

2223 2224
/* In a VAR_DECL that's static,
   nonzero if the space is in the text section.  */
2225
#define DECL_IN_TEXT_SECTION(NODE) (VAR_DECL_CHECK (NODE)->decl.bit_field_flag)
Richard Stallman committed
2226

2227 2228
/* In a FUNCTION_DECL, nonzero means a built in function.  */
#define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
2229

2230
/* For a builtin function, identify which part of the compiler defined it.  */
2231
#define DECL_BUILT_IN_CLASS(NODE) \
2232
   (FUNCTION_DECL_CHECK (NODE)->decl.built_in_class)
2233

2234
/* Used in VAR_DECLs to indicate that the variable is a vtable.
2235 2236
   Used in FIELD_DECLs for vtable pointers.
   Used in FUNCTION_DECLs to indicate that the function is virtual.  */
2237
#define DECL_VIRTUAL_P(NODE) (DECL_CHECK (NODE)->decl.virtual_flag)
Richard Stallman committed
2238

2239 2240
/* Used to indicate that the linkage status of this DECL is not yet known,
   so it should not be output now.  */
2241
#define DECL_DEFER_OUTPUT(NODE) (DECL_CHECK (NODE)->decl.defer_output)
2242

2243 2244 2245
/* Used in PARM_DECLs whose type are unions to indicate that the
   argument should be passed in the same way that the first union
   alternative would be passed.  */
2246
#define DECL_TRANSPARENT_UNION(NODE) \
2247
  (PARM_DECL_CHECK (NODE)->decl.transparent_union)
2248

2249 2250
/* Used in FUNCTION_DECLs to indicate that they should be run automatically
   at the beginning or end of execution.  */
2251
#define DECL_STATIC_CONSTRUCTOR(NODE) \
2252
  (FUNCTION_DECL_CHECK (NODE)->decl.static_ctor_flag)
2253 2254 2255

#define DECL_STATIC_DESTRUCTOR(NODE) \
(FUNCTION_DECL_CHECK (NODE)->decl.static_dtor_flag)
2256

Jason Merrill committed
2257
/* Used to indicate that this DECL represents a compiler-generated entity.  */
2258
#define DECL_ARTIFICIAL(NODE) (DECL_CHECK (NODE)->decl.artificial_flag)
Jason Merrill committed
2259

2260
/* Used to indicate that this DECL has weak linkage.  */
2261
#define DECL_WEAK(NODE) (DECL_CHECK (NODE)->decl.weak_flag)
2262

2263 2264
/* Used in TREE_PUBLIC decls to indicate that copies of this DECL in
   multiple translation units should be merged.  */
2265
#define DECL_ONE_ONLY(NODE) (DECL_CHECK (NODE)->decl.transparent_union)
2266

2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277
/* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need
   not be put out unless it is needed in this translation unit.
   Entities like this are shared across translation units (like weak
   entities), but are guaranteed to be generated by any translation
   unit that needs them, and therefore need not be put out anywhere
   where they are not needed.  DECL_COMDAT is just a hint to the
   back-end; it is up to front-ends which set this flag to ensure
   that there will never be any harm, other than bloat, in putting out
   something which is DECL_COMDAT.  */
#define DECL_COMDAT(NODE) (DECL_CHECK (NODE)->decl.comdat_flag)

2278 2279
/* Used in FUNCTION_DECLs to indicate that function entry and exit should
   be instrumented with calls to support routines.  */
2280
#define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \
2281
  (FUNCTION_DECL_CHECK (NODE)->decl.no_instrument_function_entry_exit)
2282

2283 2284
/* Used in FUNCTION_DECLs to indicate that limit-stack-* should be
   disabled in this function.  */
2285
#define DECL_NO_LIMIT_STACK(NODE) \
2286
  (FUNCTION_DECL_CHECK (NODE)->decl.no_limit_stack)
2287

Richard Stallman committed
2288
/* Additional flags for language-specific uses.  */
2289 2290 2291 2292 2293 2294 2295 2296
#define DECL_LANG_FLAG_0(NODE) (DECL_CHECK (NODE)->decl.lang_flag_0)
#define DECL_LANG_FLAG_1(NODE) (DECL_CHECK (NODE)->decl.lang_flag_1)
#define DECL_LANG_FLAG_2(NODE) (DECL_CHECK (NODE)->decl.lang_flag_2)
#define DECL_LANG_FLAG_3(NODE) (DECL_CHECK (NODE)->decl.lang_flag_3)
#define DECL_LANG_FLAG_4(NODE) (DECL_CHECK (NODE)->decl.lang_flag_4)
#define DECL_LANG_FLAG_5(NODE) (DECL_CHECK (NODE)->decl.lang_flag_5)
#define DECL_LANG_FLAG_6(NODE) (DECL_CHECK (NODE)->decl.lang_flag_6)
#define DECL_LANG_FLAG_7(NODE) (DECL_CHECK (NODE)->decl.lang_flag_7)
Richard Stallman committed
2297

2298 2299 2300 2301
/* Used to indicate that the pointer to this DECL cannot be treated as
   an address constant.  */
#define DECL_NON_ADDR_CONST_P(NODE) (DECL_CHECK (NODE)->decl.non_addr_const_p)

2302 2303 2304 2305 2306
/* Used in a FIELD_DECL to indicate that we cannot form the address of
   this component.  */
#define DECL_NONADDRESSABLE_P(NODE) \
  (FIELD_DECL_CHECK (NODE)->decl.non_addressable)

2307 2308 2309 2310 2311 2312
/* Used to indicate an alias set for the memory pointed to by this
   particular FIELD_DECL, PARM_DECL, or VAR_DECL, which must have
   pointer (or reference) type.  */
#define DECL_POINTER_ALIAS_SET(NODE) \
  (DECL_CHECK (NODE)->decl.pointer_alias_set)

2313 2314 2315 2316 2317 2318 2319

/* A numeric unique identifier for a LABEL_DECL.  The UID allocation is
   dense, unique within any one function, and may be used to index arrays.
   If the value is -1, then no UID has been assigned.  */
#define LABEL_DECL_UID(NODE) \
  (LABEL_DECL_CHECK (NODE)->decl.pointer_alias_set)

2320 2321 2322 2323
/* Nonzero if an alias set has been assigned to this declaration.  */
#define DECL_POINTER_ALIAS_SET_KNOWN_P(NODE) \
  (DECL_POINTER_ALIAS_SET (NODE) != - 1)

2324 2325 2326 2327 2328
/* Nonzero for a decl which is at file scope.  */
#define DECL_FILE_SCOPE_P(EXP) 					\
  (! DECL_CONTEXT (EXP)						\
   || TREE_CODE (DECL_CONTEXT (EXP)) == TRANSLATION_UNIT_DECL)

Zack Weinberg committed
2329 2330 2331 2332 2333 2334
/* Nonzero for a decl that cgraph has decided should be inlined into
   at least one call site.  It is not meaningful to look at this
   directly; always use cgraph_function_possibly_inlined_p.  */
#define DECL_POSSIBLY_INLINED(DECL) \
  FUNCTION_DECL_CHECK (DECL)->decl.possibly_inlined

2335 2336 2337 2338 2339
/* Nonzero for a decl that is decorated using attribute used.
   This indicates compiler tools that this decl needs to be preserved.  */
#define DECL_PRESERVE_P(DECL) \
  DECL_CHECK (DECL)->decl.preserve_flag

2340 2341 2342 2343 2344
/* Internal to the gimplifier.  Indicates that the value is a formal
   temporary controlled by the gimplifier.  */
#define DECL_GIMPLE_FORMAL_TEMP_P(DECL) \
  DECL_CHECK (DECL)->decl.gimple_formal_temp

2345
/* Enumerate visibility settings.  */
2346 2347
#ifndef SYMBOL_VISIBILITY_DEFINED
#define SYMBOL_VISIBILITY_DEFINED
2348 2349 2350 2351 2352 2353 2354
enum symbol_visibility
{
  VISIBILITY_DEFAULT,
  VISIBILITY_INTERNAL,
  VISIBILITY_HIDDEN,
  VISIBILITY_PROTECTED
};
2355
#endif
2356

2357
struct function;
2358
struct tree_decl GTY(())
Richard Stallman committed
2359
{
2360
  struct tree_common common;
2361
  location_t locus;
2362
  unsigned int uid;
2363
  tree size;
2364
  ENUM_BITFIELD(machine_mode) mode : 8;
Richard Stallman committed
2365 2366 2367 2368 2369 2370 2371 2372

  unsigned external_flag : 1;
  unsigned nonlocal_flag : 1;
  unsigned regdecl_flag : 1;
  unsigned inline_flag : 1;
  unsigned bit_field_flag : 1;
  unsigned virtual_flag : 1;
  unsigned ignored_flag : 1;
2373
  unsigned abstract_flag : 1;
Richard Stallman committed
2374

2375
  unsigned in_system_header_flag : 1;
2376
  unsigned common_flag : 1;
2377
  unsigned defer_output : 1;
2378
  unsigned transparent_union : 1;
2379 2380
  unsigned static_ctor_flag : 1;
  unsigned static_dtor_flag : 1;
Jason Merrill committed
2381
  unsigned artificial_flag : 1;
2382
  unsigned weak_flag : 1;
2383

2384 2385 2386 2387 2388
  unsigned non_addr_const_p : 1;
  unsigned no_instrument_function_entry_exit : 1;
  unsigned comdat_flag : 1;
  unsigned malloc_flag : 1;
  unsigned no_limit_stack : 1;
2389
  ENUM_BITFIELD(built_in_class) built_in_class : 2;
2390
  unsigned pure_flag : 1;
2391

2392
  unsigned non_addressable : 1;
2393
  unsigned user_align : 1;
2394
  unsigned uninlinable : 1;
2395
  unsigned thread_local_flag : 1;
2396
  unsigned declared_inline_flag : 1;
2397
  ENUM_BITFIELD(symbol_visibility) visibility : 2;
2398
  unsigned visibility_specified : 1;
2399

Richard Stallman committed
2400 2401 2402 2403 2404 2405 2406 2407 2408
  unsigned lang_flag_0 : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;
  unsigned lang_flag_5 : 1;
  unsigned lang_flag_6 : 1;
  unsigned lang_flag_7 : 1;

Zack Weinberg committed
2409
  unsigned possibly_inlined : 1;
2410
  unsigned preserve_flag: 1;
2411
  unsigned gimple_formal_temp : 1;
2412
  unsigned debug_expr_is_from : 1;
2413
  unsigned returns_twice_flag : 1;
2414 2415 2416
  unsigned seen_in_bind_expr : 1;
  unsigned novops_flag : 1;
  /* 9 unused bits.  */
2417

2418
  union tree_decl_u1 {
2419 2420
    /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is
       DECL_FUNCTION_CODE.  */
2421
    enum built_in_function f;
Kazu Hirata committed
2422
    /* In a FUNCTION_DECL for which DECL_BUILT_IN does not hold, this
2423 2424 2425 2426
       is used by language-dependent code.  */
    HOST_WIDE_INT i;
    /* DECL_ALIGN and DECL_OFFSET_ALIGN.  (These are not used for
       FUNCTION_DECLs).  */
2427
    struct tree_decl_u1_a {
2428
      unsigned int align : 24;
2429 2430
      unsigned int off_align : 8;
    } a;
2431
  } GTY ((skip)) u1;
2432

2433 2434 2435 2436 2437 2438 2439 2440 2441
  tree size_unit;
  tree name;
  tree context;
  tree arguments;	/* Also used for DECL_FIELD_OFFSET */
  tree result;	/* Also used for DECL_BIT_FIELD_TYPE */
  tree initial;	/* Also used for DECL_QUALIFIER */
  tree abstract_origin;
  tree assembler_name;
  tree section_name;
Joseph Myers committed
2442
  tree attributes;
2443
  rtx rtl;	/* RTL representation for object.  */
2444

2445
  /* In FUNCTION_DECL, if it is inline, holds the saved insn chain.
2446
     In FIELD_DECL, is DECL_FIELD_BIT_OFFSET.
2447 2448 2449
     In PARM_DECL, holds an RTL for the stack slot
     of register where the data was actually passed.
     Used by Chill and Java in LABEL_DECL and by C++ and Java in VAR_DECL.  */
2450 2451 2452 2453
  union tree_decl_u2 {
    struct function * GTY ((tag ("FUNCTION_DECL"))) f;
    rtx GTY ((tag ("PARM_DECL"))) r;
    tree GTY ((tag ("FIELD_DECL"))) t;
2454
    int GTY ((tag ("VAR_DECL"))) i;
2455
  } GTY ((desc ("TREE_CODE((tree) &(%0))"))) u2;
2456

2457 2458
  /* In a FUNCTION_DECL, this is DECL_SAVED_TREE.
     In a VAR_DECL or PARM_DECL, this is DECL_VALUE_EXPR.  */
2459
  tree saved_tree;
2460
  tree vindex;
2461
  HOST_WIDE_INT pointer_alias_set;
Richard Stallman committed
2462 2463 2464
  /* Points to a structure whose details depend on the language in use.  */
  struct lang_decl *lang_specific;
};
2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492


/* A STATEMENT_LIST chains statements together in GENERIC and GIMPLE.
   To reduce overhead, the nodes containing the statements are not trees.
   This avoids the overhead of tree_common on all linked list elements.

   Use the interface in tree-iterator.h to access this node.  */

#define STATEMENT_LIST_HEAD(NODE) \
  (STATEMENT_LIST_CHECK (NODE)->stmt_list.head)
#define STATEMENT_LIST_TAIL(NODE) \
  (STATEMENT_LIST_CHECK (NODE)->stmt_list.tail)

struct tree_statement_list_node
  GTY ((chain_next ("%h.next"), chain_prev ("%h.prev")))
{
  struct tree_statement_list_node *prev;
  struct tree_statement_list_node *next;
  tree stmt;
};

struct tree_statement_list
  GTY(())
{
  struct tree_common common;
  struct tree_statement_list_node *head;
  struct tree_statement_list_node *tail;
};
2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511

#define VALUE_HANDLE_ID(NODE)		\
  (VALUE_HANDLE_CHECK (NODE)->value_handle.id)

#define VALUE_HANDLE_EXPR_SET(NODE)	\
  (VALUE_HANDLE_CHECK (NODE)->value_handle.expr_set)

/* Defined and used in tree-ssa-pre.c.  */
struct value_set;

struct tree_value_handle GTY(())
{
  struct tree_common common;

  /* The set of expressions represented by this handle.  */
  struct value_set * GTY ((skip)) expr_set;

  /* Unique ID for this value handle.  IDs are handed out in a
     conveniently dense form starting at 0, so that we can make
2512
     bitmaps of value handles.  */
2513 2514
  unsigned int id;
};
Richard Stallman committed
2515

2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528
enum tree_node_structure_enum {
  TS_COMMON,
  TS_INT_CST,
  TS_REAL_CST,
  TS_VECTOR,
  TS_STRING,
  TS_COMPLEX,
  TS_IDENTIFIER,
  TS_DECL,
  TS_TYPE,
  TS_LIST,
  TS_VEC,
  TS_EXP,
2529 2530
  TS_SSA_NAME,
  TS_PHI_NODE,
2531
  TS_BLOCK,
2532
  TS_BINFO,
2533
  TS_STATEMENT_LIST,
2534
  TS_VALUE_HANDLE,
2535 2536 2537
  LAST_TS_ENUM
};

Richard Stallman committed
2538 2539 2540 2541
/* Define the overall contents of a tree node.
   It may be any of the structures declared above
   for various types of node.  */

2542 2543
union tree_node GTY ((ptr_alias (union lang_tree_node),
		      desc ("tree_node_structure (&%h)")))
Richard Stallman committed
2544
{
2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556
  struct tree_common GTY ((tag ("TS_COMMON"))) common;
  struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
  struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
  struct tree_vector GTY ((tag ("TS_VECTOR"))) vector;
  struct tree_string GTY ((tag ("TS_STRING"))) string;
  struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex;
  struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier;
  struct tree_decl GTY ((tag ("TS_DECL"))) decl;
  struct tree_type GTY ((tag ("TS_TYPE"))) type;
  struct tree_list GTY ((tag ("TS_LIST"))) list;
  struct tree_vec GTY ((tag ("TS_VEC"))) vec;
  struct tree_exp GTY ((tag ("TS_EXP"))) exp;
2557 2558
  struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name;
  struct tree_phi_node GTY ((tag ("TS_PHI_NODE"))) phi;
2559
  struct tree_block GTY ((tag ("TS_BLOCK"))) block;
2560
  struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo;
2561
  struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list;
2562
  struct tree_value_handle GTY ((tag ("TS_VALUE_HANDLE"))) value_handle;
2563
};
2564

2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580
/* Standard named or nameless data types of the C compiler.  */

enum tree_index
{
  TI_ERROR_MARK,
  TI_INTQI_TYPE,
  TI_INTHI_TYPE,
  TI_INTSI_TYPE,
  TI_INTDI_TYPE,
  TI_INTTI_TYPE,

  TI_UINTQI_TYPE,
  TI_UINTHI_TYPE,
  TI_UINTSI_TYPE,
  TI_UINTDI_TYPE,
  TI_UINTTI_TYPE,
Kazu Hirata committed
2581

2582 2583
  TI_INTEGER_ZERO,
  TI_INTEGER_ONE,
2584
  TI_INTEGER_MINUS_ONE,
2585 2586 2587 2588
  TI_NULL_POINTER,

  TI_SIZE_ZERO,
  TI_SIZE_ONE,
2589 2590 2591 2592 2593

  TI_BITSIZE_ZERO,
  TI_BITSIZE_ONE,
  TI_BITSIZE_UNIT,

2594 2595 2596 2597
  TI_PUBLIC,
  TI_PROTECTED,
  TI_PRIVATE,

2598 2599 2600
  TI_BOOLEAN_FALSE,
  TI_BOOLEAN_TRUE,

2601 2602 2603 2604 2605 2606 2607 2608 2609
  TI_COMPLEX_INTEGER_TYPE,
  TI_COMPLEX_FLOAT_TYPE,
  TI_COMPLEX_DOUBLE_TYPE,
  TI_COMPLEX_LONG_DOUBLE_TYPE,

  TI_FLOAT_TYPE,
  TI_DOUBLE_TYPE,
  TI_LONG_DOUBLE_TYPE,

2610 2611 2612 2613 2614
  TI_FLOAT_PTR_TYPE,
  TI_DOUBLE_PTR_TYPE,
  TI_LONG_DOUBLE_PTR_TYPE,
  TI_INTEGER_PTR_TYPE,

2615 2616 2617
  TI_VOID_TYPE,
  TI_PTR_TYPE,
  TI_CONST_PTR_TYPE,
2618
  TI_SIZE_TYPE,
2619
  TI_PID_TYPE,
2620 2621
  TI_PTRDIFF_TYPE,
  TI_VA_LIST_TYPE,
2622 2623
  TI_VA_LIST_GPR_COUNTER_FIELD,
  TI_VA_LIST_FPR_COUNTER_FIELD,
2624
  TI_BOOLEAN_TYPE,
2625
  TI_FILEPTR_TYPE,
2626

2627 2628
  TI_VOID_LIST_NODE,

2629 2630
  TI_MAIN_IDENTIFIER,

2631 2632 2633
  TI_MAX
};

2634
extern GTY(()) tree global_trees[TI_MAX];
2635 2636

#define error_mark_node			global_trees[TI_ERROR_MARK]
Kazu Hirata committed
2637

2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651
#define intQI_type_node			global_trees[TI_INTQI_TYPE]
#define intHI_type_node			global_trees[TI_INTHI_TYPE]
#define intSI_type_node			global_trees[TI_INTSI_TYPE]
#define intDI_type_node			global_trees[TI_INTDI_TYPE]
#define intTI_type_node			global_trees[TI_INTTI_TYPE]

#define unsigned_intQI_type_node	global_trees[TI_UINTQI_TYPE]
#define unsigned_intHI_type_node	global_trees[TI_UINTHI_TYPE]
#define unsigned_intSI_type_node	global_trees[TI_UINTSI_TYPE]
#define unsigned_intDI_type_node	global_trees[TI_UINTDI_TYPE]
#define unsigned_intTI_type_node	global_trees[TI_UINTTI_TYPE]

#define integer_zero_node		global_trees[TI_INTEGER_ZERO]
#define integer_one_node		global_trees[TI_INTEGER_ONE]
2652
#define integer_minus_one_node		global_trees[TI_INTEGER_MINUS_ONE]
2653 2654
#define size_zero_node			global_trees[TI_SIZE_ZERO]
#define size_one_node			global_trees[TI_SIZE_ONE]
2655 2656 2657 2658
#define bitsize_zero_node		global_trees[TI_BITSIZE_ZERO]
#define bitsize_one_node		global_trees[TI_BITSIZE_ONE]
#define bitsize_unit_node		global_trees[TI_BITSIZE_UNIT]

2659
/* Base access nodes.  */
2660 2661 2662
#define access_public_node		global_trees[TI_PUBLIC]
#define access_protected_node	        global_trees[TI_PROTECTED]
#define access_private_node		global_trees[TI_PRIVATE]
2663

2664 2665 2666 2667 2668 2669
#define null_pointer_node		global_trees[TI_NULL_POINTER]

#define float_type_node			global_trees[TI_FLOAT_TYPE]
#define double_type_node		global_trees[TI_DOUBLE_TYPE]
#define long_double_type_node		global_trees[TI_LONG_DOUBLE_TYPE]

2670 2671 2672 2673 2674
#define float_ptr_type_node		global_trees[TI_FLOAT_PTR_TYPE]
#define double_ptr_type_node		global_trees[TI_DOUBLE_PTR_TYPE]
#define long_double_ptr_type_node	global_trees[TI_LONG_DOUBLE_PTR_TYPE]
#define integer_ptr_type_node		global_trees[TI_INTEGER_PTR_TYPE]

2675 2676 2677 2678 2679 2680
#define complex_integer_type_node	global_trees[TI_COMPLEX_INTEGER_TYPE]
#define complex_float_type_node		global_trees[TI_COMPLEX_FLOAT_TYPE]
#define complex_double_type_node	global_trees[TI_COMPLEX_DOUBLE_TYPE]
#define complex_long_double_type_node	global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]

#define void_type_node			global_trees[TI_VOID_TYPE]
2681
/* The C type `void *'.  */
2682
#define ptr_type_node			global_trees[TI_PTR_TYPE]
2683
/* The C type `const void *'.  */
2684
#define const_ptr_type_node		global_trees[TI_CONST_PTR_TYPE]
2685 2686
/* The C type `size_t'.  */
#define size_type_node                  global_trees[TI_SIZE_TYPE]
2687
#define pid_type_node                   global_trees[TI_PID_TYPE]
2688 2689
#define ptrdiff_type_node		global_trees[TI_PTRDIFF_TYPE]
#define va_list_type_node		global_trees[TI_VA_LIST_TYPE]
2690 2691
#define va_list_gpr_counter_field	global_trees[TI_VA_LIST_GPR_COUNTER_FIELD]
#define va_list_fpr_counter_field	global_trees[TI_VA_LIST_FPR_COUNTER_FIELD]
2692 2693
/* The C type `FILE *'.  */
#define fileptr_type_node		global_trees[TI_FILEPTR_TYPE]
2694

2695 2696 2697 2698
#define boolean_type_node		global_trees[TI_BOOLEAN_TYPE]
#define boolean_false_node		global_trees[TI_BOOLEAN_FALSE]
#define boolean_true_node		global_trees[TI_BOOLEAN_TRUE]

2699 2700 2701 2702 2703 2704 2705
/* The node that should be placed at the end of a parameter list to
   indicate that the function does not take a variable number of
   arguments.  The TREE_VALUE will be void_type_node and there will be
   no TREE_CHAIN.  Language-independent code should not assume
   anything else about this node.  */
#define void_list_node                  global_trees[TI_VOID_LIST_NODE]

2706 2707 2708
#define main_identifier_node		global_trees[TI_MAIN_IDENTIFIER]
#define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)

2709
/* An enumeration of the standard C integer types.  These must be
2710 2711 2712
   ordered so that shorter types appear before longer ones, and so
   that signed types appear before unsigned ones, for the correct
   functioning of interpret_integer() in c-lex.c.  */
Kazu Hirata committed
2713
enum integer_type_kind
2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732
{
  itk_char,
  itk_signed_char,
  itk_unsigned_char,
  itk_short,
  itk_unsigned_short,
  itk_int,
  itk_unsigned_int,
  itk_long,
  itk_unsigned_long,
  itk_long_long,
  itk_unsigned_long_long,
  itk_none
};

typedef enum integer_type_kind integer_type_kind;

/* The standard C integer types.  Use integer_type_kind to index into
   this array.  */
2733
extern GTY(()) tree integer_types[itk_none];
2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745

#define char_type_node			integer_types[itk_char]
#define signed_char_type_node		integer_types[itk_signed_char]
#define unsigned_char_type_node		integer_types[itk_unsigned_char]
#define short_integer_type_node		integer_types[itk_short]
#define short_unsigned_type_node	integer_types[itk_unsigned_short]
#define integer_type_node		integer_types[itk_int]
#define unsigned_type_node		integer_types[itk_unsigned_int]
#define long_integer_type_node		integer_types[itk_long]
#define long_unsigned_type_node		integer_types[itk_unsigned_long]
#define long_long_integer_type_node	integer_types[itk_long_long]
#define long_long_unsigned_type_node	integer_types[itk_unsigned_long_long]
2746 2747 2748 2749

/* Set to the default thread-local storage (tls) model to use.  */

extern enum tls_model flag_tls_default;
2750

2751

2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778
/* A pointer-to-function member type looks like:

     struct {
       __P __pfn;
       ptrdiff_t __delta;
     };

   If __pfn is NULL, it is a NULL pointer-to-member-function.

   (Because the vtable is always the first thing in the object, we
   don't need its offset.)  If the function is virtual, then PFN is
   one plus twice the index into the vtable; otherwise, it is just a
   pointer to the function.

   Unfortunately, using the lowest bit of PFN doesn't work in
   architectures that don't impose alignment requirements on function
   addresses, or that use the lowest bit to tell one ISA from another,
   for example.  For such architectures, we use the lowest bit of
   DELTA instead of the lowest bit of the PFN, and DELTA will be
   multiplied by 2.  */

enum ptrmemfunc_vbit_where_t
{
  ptrmemfunc_vbit_in_pfn,
  ptrmemfunc_vbit_in_delta
};

2779 2780
#define NULL_TREE (tree) NULL

2781
extern GTY(()) tree frame_base_decl;
2782
extern tree decl_assembler_name (tree);
Richard Stallman committed
2783

2784 2785 2786
/* Compute the number of bytes occupied by 'node'.  This routine only
   looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH.  */

2787
extern size_t tree_size (tree);
2788

2789 2790 2791 2792 2793
/* Compute the number of bytes occupied by a tree with code CODE.  This
   function cannot be used for TREE_VEC or PHI_NODE codes, which are of
   variable length.  */
extern size_t tree_code_size (enum tree_code);

Richard Stallman committed
2794 2795 2796 2797
/* Lowest level primitive for allocating a node.
   The TREE_CODE is the only argument.  Contents are initialized
   to zero except for a few of the common fields.  */

2798 2799
extern tree make_node_stat (enum tree_code MEM_STAT_DECL);
#define make_node(t) make_node_stat (t MEM_STAT_INFO)
Richard Stallman committed
2800

2801
/* Make a copy of a node, with all the same contents.  */
Richard Stallman committed
2802

2803 2804
extern tree copy_node_stat (tree MEM_STAT_DECL);
#define copy_node(t) copy_node_stat (t MEM_STAT_INFO)
Richard Stallman committed
2805 2806 2807

/* Make a copy of a chain of TREE_LIST nodes.  */

2808
extern tree copy_list (tree);
Richard Stallman committed
2809

2810 2811 2812 2813
/* Make a BINFO.  */
extern tree make_tree_binfo_stat (unsigned MEM_STAT_DECL);
#define make_tree_binfo(t) make_tree_binfo_stat (t MEM_STAT_INFO)

Richard Stallman committed
2814 2815
/* Make a TREE_VEC.  */

2816 2817
extern tree make_tree_vec_stat (int MEM_STAT_DECL);
#define make_tree_vec(t) make_tree_vec_stat (t MEM_STAT_INFO)
Richard Stallman committed
2818

2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830
/* Tree nodes for SSA analysis.  */

extern void init_phinodes (void);
extern void fini_phinodes (void);
extern void release_phi_node (tree);
#ifdef GATHER_STATISTICS
extern void phinodes_print_statistics (void);
#endif

extern void init_ssanames (void);
extern void fini_ssanames (void);
extern tree make_ssa_name (tree, tree);
2831
extern tree duplicate_ssa_name (tree, tree);
2832
extern void duplicate_ssa_name_ptr_info (tree, struct ptr_info_def *);
2833
extern void release_ssa_name (tree);
2834
extern void release_defs (tree);
2835
extern void replace_ssa_name_symbol (tree, tree);
2836

2837 2838 2839 2840
#ifdef GATHER_STATISTICS
extern void ssanames_print_statistics (void);
#endif

Richard Stallman committed
2841 2842 2843
/* Return the (unique) IDENTIFIER_NODE node for a given name.
   The name is supplied as a char *.  */

2844
extern tree get_identifier (const char *);
Richard Stallman committed
2845

2846 2847 2848 2849 2850 2851 2852 2853
#if GCC_VERSION >= 3000
#define get_identifier(str) \
  (__builtin_constant_p (str)				\
    ? get_identifier_with_length ((str), strlen (str))  \
    : get_identifier (str))
#endif


2854 2855 2856
/* Identical to get_identifier, except that the length is assumed
   known.  */

2857
extern tree get_identifier_with_length (const char *, size_t);
2858

2859 2860 2861 2862
/* If an identifier with the name TEXT (a null-terminated string) has
   previously been referred to, return that node; otherwise return
   NULL_TREE.  */

2863
extern tree maybe_get_identifier (const char *);
2864

Richard Stallman committed
2865 2866
/* Construct various types of nodes.  */

2867 2868 2869
extern tree build (enum tree_code, tree, ...);
extern tree build_nt (enum tree_code, ...);

2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881
#if GCC_VERSION >= 3000 || __STDC_VERSION__ >= 199901L
/* Use preprocessor trickery to map "build" to "buildN" where N is the
   expected number of arguments.  This is used for both efficiency (no
   varargs), and checking (verifying number of passed arguments).  */
#define build(code, ...) \
  _buildN1(build, _buildC1(__VA_ARGS__))(code, __VA_ARGS__)
#define _buildN1(BASE, X)	_buildN2(BASE, X)
#define _buildN2(BASE, X)	BASE##X
#define _buildC1(...)		_buildC2(__VA_ARGS__,9,8,7,6,5,4,3,2,1,0,0)
#define _buildC2(x,a1,a2,a3,a4,a5,a6,a7,a8,a9,c,...) c
#endif

2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892
extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL);
#define build0(c,t) build0_stat (c,t MEM_STAT_INFO)
extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL);
#define build1(c,t1,t2) build1_stat (c,t1,t2 MEM_STAT_INFO)
extern tree build2_stat (enum tree_code, tree, tree, tree MEM_STAT_DECL);
#define build2(c,t1,t2,t3) build2_stat (c,t1,t2,t3 MEM_STAT_INFO)
extern tree build3_stat (enum tree_code, tree, tree, tree, tree MEM_STAT_DECL);
#define build3(c,t1,t2,t3,t4) build3_stat (c,t1,t2,t3,t4 MEM_STAT_INFO)
extern tree build4_stat (enum tree_code, tree, tree, tree, tree,
			 tree MEM_STAT_DECL);
#define build4(c,t1,t2,t3,t4,t5) build4_stat (c,t1,t2,t3,t4,t5 MEM_STAT_INFO)
2893

2894
extern tree build_int_cst (tree, HOST_WIDE_INT);
2895
extern tree build_int_cst_type (tree, HOST_WIDE_INT);
2896 2897
extern tree build_int_cstu (tree, unsigned HOST_WIDE_INT);
extern tree build_int_cst_wide (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT);
2898 2899 2900 2901 2902
extern tree build_vector (tree, tree);
extern tree build_constructor (tree, tree);
extern tree build_real_from_int_cst (tree, tree);
extern tree build_complex (tree, tree, tree);
extern tree build_string (int, const char *);
2903 2904 2905
extern tree build_tree_list_stat (tree, tree MEM_STAT_DECL);
#define build_tree_list(t,q) build_tree_list_stat(t,q MEM_STAT_INFO)
extern tree build_decl_stat (enum tree_code, tree, tree MEM_STAT_DECL);
2906
extern tree build_fn_decl (const char *, tree); 
2907
#define build_decl(c,t,q) build_decl_stat (c,t,q MEM_STAT_INFO)
2908
extern tree build_block (tree, tree, tree, tree);
2909
#ifndef USE_MAPPED_LOCATION
2910 2911
extern void annotate_with_file_line (tree, const char *, int);
extern void annotate_with_locus (tree, location_t);
2912
#endif
2913
extern tree build_empty_stmt (void);
Richard Stallman committed
2914 2915 2916

/* Construct various nodes representing data types.  */

2917 2918
extern tree make_signed_type (int);
extern tree make_unsigned_type (int);
2919
extern tree signed_type_for (tree);
2920
extern tree unsigned_type_for (tree);
2921
extern void initialize_sizetypes (bool);
2922 2923
extern void set_sizetype (tree);
extern void fixup_unsigned_type (tree);
2924
extern tree build_pointer_type_for_mode (tree, enum machine_mode, bool);
2925
extern tree build_pointer_type (tree);
2926
extern tree build_reference_type_for_mode (tree, enum machine_mode, bool);
2927
extern tree build_reference_type (tree);
2928 2929
extern tree build_vector_type_for_mode (tree, enum machine_mode);
extern tree build_vector_type (tree innertype, int nunits);
2930 2931 2932 2933 2934 2935
extern tree build_type_no_quals (tree);
extern tree build_index_type (tree);
extern tree build_index_2_type (tree, tree);
extern tree build_array_type (tree, tree);
extern tree build_function_type (tree, tree);
extern tree build_function_type_list (tree, ...);
2936
extern tree build_method_type_directly (tree, tree, tree);
2937 2938 2939
extern tree build_method_type (tree, tree);
extern tree build_offset_type (tree, tree);
extern tree build_complex_type (tree);
2940
extern tree build_resx (int);
2941
extern tree array_type_nelts (tree);
2942
extern bool in_array_bounds_p (tree);
2943 2944 2945

extern tree value_member (tree, tree);
extern tree purpose_member (tree, tree);
2946

2947 2948 2949 2950 2951 2952 2953 2954 2955
extern int attribute_list_equal (tree, tree);
extern int attribute_list_contained (tree, tree);
extern int tree_int_cst_equal (tree, tree);
extern int tree_int_cst_lt (tree, tree);
extern int tree_int_cst_compare (tree, tree);
extern int host_integerp (tree, int);
extern HOST_WIDE_INT tree_low_cst (tree, int);
extern int tree_int_cst_msb (tree);
extern int tree_int_cst_sgn (tree);
2956
extern int tree_int_cst_sign_bit (tree);
2957
extern int tree_expr_nonnegative_p (tree);
2958
extern bool may_negate_without_overflow_p (tree);
2959
extern tree get_inner_array_type (tree);
2960

2961 2962 2963 2964
/* From expmed.c.  Since rtl.h is included after tree.h, we can't
   put the prototype here.  Rtl.h does declare the prototype if
   tree.h had been included.  */

2965
extern tree make_tree (tree, rtx);
Richard Stallman committed
2966

2967 2968 2969 2970
/* Return a type like TTYPE except that its TYPE_ATTRIBUTES
   is ATTRIBUTE.

   Such modified types already made are recorded so that duplicates
2971
   are not made.  */
2972

2973 2974
extern tree build_type_attribute_variant (tree, tree);
extern tree build_decl_attribute_variant (tree, tree);
2975

Joseph Myers committed
2976 2977 2978 2979 2980
/* Structure describing an attribute and a function to handle it.  */
struct attribute_spec
{
  /* The name of the attribute (without any leading or trailing __),
     or NULL to mark the end of a table of attributes.  */
2981
  const char *const name;
Joseph Myers committed
2982
  /* The minimum length of the list of arguments of the attribute.  */
2983
  const int min_length;
Joseph Myers committed
2984 2985
  /* The maximum length of the list of arguments of the attribute
     (-1 for no maximum).  */
2986
  const int max_length;
Joseph Myers committed
2987 2988 2989 2990 2991 2992 2993
  /* Whether this attribute requires a DECL.  If it does, it will be passed
     from types of DECLs, function return types and array element types to
     the DECLs, function types and array types respectively; but when
     applied to a type in any other circumstances, it will be ignored with
     a warning.  (If greater control is desired for a given attribute,
     this should be false, and the flags argument to the handler may be
     used to gain greater control in that case.)  */
2994
  const bool decl_required;
Joseph Myers committed
2995 2996
  /* Whether this attribute requires a type.  If it does, it will be passed
     from a DECL to the type of that DECL.  */
2997
  const bool type_required;
Joseph Myers committed
2998 2999 3000 3001
  /* Whether this attribute requires a function (or method) type.  If it does,
     it will be passed from a function pointer type to the target type,
     and from a function return type (which is not itself a function
     pointer type) to the function type.  */
3002
  const bool function_type_required;
Joseph Myers committed
3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016
  /* Function to handle this attribute.  NODE points to the node to which
     the attribute is to be applied.  If a DECL, it should be modified in
     place; if a TYPE, a copy should be created.  NAME is the name of the
     attribute (possibly with leading or trailing __).  ARGS is the TREE_LIST
     of the arguments (which may be NULL).  FLAGS gives further information
     about the context of the attribute.  Afterwards, the attributes will
     be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as appropriate,
     unless *NO_ADD_ATTRS is set to true (which should be done on error,
     as well as in any other cases when the attributes should not be added
     to the DECL or TYPE).  Depending on FLAGS, any attributes to be
     applied to another type or DECL later may be returned;
     otherwise the return value should be NULL_TREE.  This pointer may be
     NULL if no special handling is required beyond the checks implied
     by the rest of this structure.  */
3017 3018
  tree (*const handler) (tree *node, tree name, tree args,
				 int flags, bool *no_add_attrs);
Joseph Myers committed
3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038
};

/* Flags that may be passed in the third argument of decl_attributes, and
   to handler functions for attributes.  */
enum attribute_flags
{
  /* The type passed in is the type of a DECL, and any attributes that
     should be passed in again to be applied to the DECL rather than the
     type should be returned.  */
  ATTR_FLAG_DECL_NEXT = 1,
  /* The type passed in is a function return type, and any attributes that
     should be passed in again to be applied to the function type rather
     than the return type should be returned.  */
  ATTR_FLAG_FUNCTION_NEXT = 2,
  /* The type passed in is an array element type, and any attributes that
     should be passed in again to be applied to the array type rather
     than the element type should be returned.  */
  ATTR_FLAG_ARRAY_NEXT = 4,
  /* The type passed in is a structure, union or enumeration type being
     created, and should be modified in place.  */
3039 3040 3041 3042 3043
  ATTR_FLAG_TYPE_IN_PLACE = 8,
  /* The attributes are being applied by default to a library function whose
     name indicates known behavior, and should be silently ignored if they
     are not in fact compatible with the function type.  */
  ATTR_FLAG_BUILT_IN = 16
Joseph Myers committed
3044 3045
};

3046 3047
/* Default versions of target-overridable functions.  */

3048 3049
extern tree merge_decl_attributes (tree, tree);
extern tree merge_type_attributes (tree, tree);
3050

3051
/* Given a tree node and a string, return nonzero if the tree node is
3052 3053
   a valid attribute name for the string.  */

3054
extern int is_attribute_p (const char *, tree);
3055 3056 3057 3058

/* Given an attribute name and a list of attributes, return the list element
   of the attribute or NULL_TREE if not found.  */

3059
extern tree lookup_attribute (const char *, tree);
3060 3061 3062

/* Given two attributes lists, return a list of their union.  */

3063
extern tree merge_attributes (tree, tree);
3064

3065
#if TARGET_DLLIMPORT_DECL_ATTRIBUTES
3066 3067
/* Given two Windows decl attributes lists, possibly including
   dllimport, return a list of their union .  */
3068
extern tree merge_dllimport_decl_attributes (tree, tree);
3069 3070 3071

/* Handle a "dllimport" or "dllexport" attribute.  */
extern tree handle_dll_attribute (tree *, tree, tree, int, bool *);
3072 3073
#endif

3074 3075 3076 3077 3078
/* Check whether CAND is suitable to be returned from get_qualified_type
   (BASE, TYPE_QUALS).  */

extern bool check_qualified_type (tree, tree, int);

3079 3080 3081 3082
/* Return a version of the TYPE, qualified as indicated by the
   TYPE_QUALS, if one exists.  If no qualified version exists yet,
   return NULL_TREE.  */

3083
extern tree get_qualified_type (tree, int);
3084 3085 3086

/* Like get_qualified_type, but creates the type if it does not
   exist.  This function never returns NULL_TREE.  */
3087

3088
extern tree build_qualified_type (tree, int);
3089 3090 3091

/* Like build_qualified_type, but only deals with the `const' and
   `volatile' qualifiers.  This interface is retained for backwards
3092
   compatibility with the various front-ends; new code should use
3093
   build_qualified_type instead.  */
Richard Stallman committed
3094

3095
#define build_type_variant(TYPE, CONST_P, VOLATILE_P)			\
3096
  build_qualified_type ((TYPE),						\
3097 3098
			((CONST_P) ? TYPE_QUAL_CONST : 0)		\
			| ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0))
Richard Stallman committed
3099

3100 3101
/* Make a copy of a type node.  */

3102 3103
extern tree build_distinct_type_copy (tree);
extern tree build_variant_type_copy (tree);
3104

3105
/* Finish up a builtin RECORD_TYPE. Give it a name and provide its
3106
   fields. Optionally specify an alignment, and then lay it out.  */
3107

3108 3109
extern void finish_builtin_struct (tree, const char *,
							 tree, tree);
3110

Richard Stallman committed
3111
/* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT,
3112 3113
   TYPE_ALIGN and TYPE_MODE fields.  If called more than once on one
   node, does nothing except for the first time.  */
Richard Stallman committed
3114

3115
extern void layout_type (tree);
Richard Stallman committed
3116

3117 3118 3119
/* These functions allow a front-end to perform a manual layout of a
   RECORD_TYPE.  (For instance, if the placement of subsequent fields
   depends on the placement of fields so far.)  Begin by calling
3120
   start_record_layout.  Then, call place_field for each of the
3121 3122 3123
   fields.  Then, call finish_record_layout.  See layout_type for the
   default way in which these functions are used.  */

3124
typedef struct record_layout_info_s
3125 3126 3127
{
  /* The RECORD_TYPE that we are laying out.  */
  tree t;
3128 3129 3130 3131 3132 3133 3134
  /* The offset into the record so far, in bytes, not including bits in
     BITPOS.  */
  tree offset;
  /* The last known alignment of SIZE.  */
  unsigned int offset_align;
  /* The bit position within the last OFFSET_ALIGN bits, in bits.  */
  tree bitpos;
3135 3136
  /* The alignment of the record so far, in bits.  */
  unsigned int record_align;
3137 3138
  /* The alignment of the record so far, ignoring #pragma pack and
     __attribute__ ((packed)), in bits.  */
3139
  unsigned int unpacked_align;
3140 3141
  /* The previous field layed out.  */
  tree prev_field;
3142 3143 3144
  /* The static variables (i.e., class variables, as opposed to
     instance variables) encountered in T.  */
  tree pending_statics;
3145 3146
  /* Bits remaining in the current alignment group */
  int remaining_in_alignment;
3147 3148 3149
  /* True if prev_field was packed and we haven't found any non-packed
     fields that we have put in the same alignment group.  */
  int prev_packed;
3150 3151
  /* True if we've seen a packed field that didn't have normal
     alignment anyway.  */
3152
  int packed_maybe_necessary;
3153
} *record_layout_info;
3154

3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166
extern void set_lang_adjust_rli (void (*) (record_layout_info));
extern record_layout_info start_record_layout (tree);
extern tree bit_from_pos (tree, tree);
extern tree byte_from_pos (tree, tree);
extern void pos_from_bit (tree *, tree *, unsigned int, tree);
extern void normalize_offset (tree *, tree *, unsigned int);
extern tree rli_size_unit_so_far (record_layout_info);
extern tree rli_size_so_far (record_layout_info);
extern void normalize_rli (record_layout_info);
extern void place_field (record_layout_info, tree);
extern void compute_record_mode (tree);
extern void finish_record_layout (record_layout_info, int);
3167

Richard Stallman committed
3168 3169 3170 3171 3172
/* Given a hashcode and a ..._TYPE node (for which the hashcode was made),
   return a canonicalized ..._TYPE node, so that duplicates are not made.
   How the hash code is computed is up to the caller, as long as any two
   callers that could hash identical-looking type nodes agree.  */

3173
extern tree type_hash_canon (unsigned int, tree);
Richard Stallman committed
3174 3175 3176 3177 3178 3179 3180 3181 3182

/* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node,
   calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE
   fields.  Call this only once for any given decl node.

   Second argument is the boundary that this field can be assumed to
   be starting at (in bits).  Zero means it can be assumed aligned
   on any boundary that may be needed.  */

3183
extern void layout_decl (tree, unsigned);
Richard Stallman committed
3184

3185 3186 3187 3188 3189
/* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
   a previous call to layout_decl and calls it again.  */

extern void relayout_decl (tree);

3190 3191 3192 3193 3194
/* Return the mode for data of a given size SIZE and mode class CLASS.
   If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
   The value is BLKmode if no other mode is found.  This is like
   mode_for_size, but is passed a tree.  */

3195
extern enum machine_mode mode_for_size_tree (tree, enum mode_class, int);
3196

Richard Stallman committed
3197 3198
/* Return an expr equal to X but certainly not valid as an lvalue.  */

3199 3200 3201 3202 3203 3204
extern tree non_lvalue (tree);

extern tree convert (tree, tree);
extern unsigned int expr_align (tree);
extern tree expr_first (tree);
extern tree expr_last (tree);
3205
extern tree expr_only (tree);
3206 3207 3208 3209 3210 3211
extern tree size_in_bytes (tree);
extern HOST_WIDE_INT int_size_in_bytes (tree);
extern tree bit_position (tree);
extern HOST_WIDE_INT int_bit_position (tree);
extern tree byte_position (tree);
extern HOST_WIDE_INT int_byte_position (tree);
3212 3213 3214 3215 3216 3217

/* Define data structures, macros, and functions for handling sizes
   and the various types used to represent sizes.  */

enum size_type_kind
{
3218 3219
  SIZETYPE,		/* Normal representation of sizes in bytes.  */
  SSIZETYPE,		/* Signed representation of sizes in bytes.  */
3220 3221 3222 3223
  BITSIZETYPE,		/* Normal representation of sizes in bits.  */
  SBITSIZETYPE,		/* Signed representation of sizes in bits.  */
  TYPE_KIND_LAST};

3224
extern GTY(()) tree sizetype_tab[(int) TYPE_KIND_LAST];
3225 3226 3227 3228 3229 3230

#define sizetype sizetype_tab[(int) SIZETYPE]
#define bitsizetype sizetype_tab[(int) BITSIZETYPE]
#define ssizetype sizetype_tab[(int) SSIZETYPE]
#define sbitsizetype sizetype_tab[(int) SBITSIZETYPE]

3231
extern tree size_int_kind (HOST_WIDE_INT, enum size_type_kind);
3232 3233
extern tree size_binop (enum tree_code, tree, tree);
extern tree size_diffop (tree, tree);
3234 3235 3236 3237 3238

#define size_int(L) size_int_kind (L, SIZETYPE)
#define ssize_int(L) size_int_kind (L, SSIZETYPE)
#define bitsize_int(L) size_int_kind (L, BITSIZETYPE)
#define sbitsize_int(L) size_int_kind (L, SBITSIZETYPE)
3239

3240 3241 3242 3243 3244
extern tree round_up (tree, int);
extern tree round_down (tree, int);
extern tree get_pending_sizes (void);
extern void put_pending_size (tree);
extern void put_pending_sizes (tree);
Richard Stallman committed
3245 3246 3247

/* Type for sizes of data-type.  */

3248 3249 3250 3251 3252
#define BITS_PER_UNIT_LOG \
  ((BITS_PER_UNIT > 1) + (BITS_PER_UNIT > 2) + (BITS_PER_UNIT > 4) \
   + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \
   + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256))

3253
/* If nonzero, an upper limit on alignment of structure fields, in bits,  */
3254
extern unsigned int maximum_field_alignment;
3255
/* and its original value in bytes, specified via -fpack-struct=<value>.  */
3256
extern unsigned int initial_max_fld_align;
3257

Richard Stallman committed
3258 3259 3260 3261
/* Concatenate two lists (chains of TREE_LIST nodes) X and Y
   by making the last node in X point to Y.
   Returns X, except if X is 0 returns Y.  */

3262
extern tree chainon (tree, tree);
Richard Stallman committed
3263 3264 3265

/* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN.  */

3266 3267
extern tree tree_cons_stat (tree, tree, tree MEM_STAT_DECL);
#define tree_cons(t,q,w) tree_cons_stat (t,q,w MEM_STAT_INFO)
Richard Stallman committed
3268 3269 3270

/* Return the last tree node in a chain.  */

3271
extern tree tree_last (tree);
Richard Stallman committed
3272 3273 3274

/* Reverse the order of elements in a chain, and return the new head.  */

3275
extern tree nreverse (tree);
Richard Stallman committed
3276 3277 3278 3279

/* Returns the length of a chain of nodes
   (number of chain pointers to follow before reaching a null pointer).  */

3280
extern int list_length (tree);
Richard Stallman committed
3281

3282 3283
/* Returns the number of FIELD_DECLs in a type.  */

3284
extern int fields_length (tree);
3285

3286 3287 3288
/* Given an initializer INIT, return TRUE if INIT is zero or some
   aggregate of zeros.  Otherwise return FALSE.  */

3289
extern bool initializer_zerop (tree);
3290

3291 3292
extern void categorize_ctor_elements (tree, HOST_WIDE_INT *, HOST_WIDE_INT *,
				      HOST_WIDE_INT *, bool *);
3293
extern HOST_WIDE_INT count_type_elements (tree);
3294

3295 3296 3297 3298
/* add_var_to_bind_expr (bind_expr, var) binds var to bind_expr.  */

extern void add_var_to_bind_expr (tree, tree);

3299
/* integer_zerop (tree x) is nonzero if X is an integer constant of value 0.  */
Richard Stallman committed
3300

3301
extern int integer_zerop (tree);
Richard Stallman committed
3302

3303
/* integer_onep (tree x) is nonzero if X is an integer constant of value 1.  */
Richard Stallman committed
3304

3305
extern int integer_onep (tree);
Richard Stallman committed
3306 3307 3308 3309

/* integer_all_onesp (tree x) is nonzero if X is an integer constant
   all of whose significant bits are 1.  */

3310
extern int integer_all_onesp (tree);
Richard Stallman committed
3311 3312 3313 3314

/* integer_pow2p (tree x) is nonzero is X is an integer constant with
   exactly one bit 1.  */

3315
extern int integer_pow2p (tree);
Richard Stallman committed
3316

3317 3318 3319
/* integer_nonzerop (tree x) is nonzero if X is an integer constant
   with a nonzero value.  */

3320
extern int integer_nonzerop (tree);
3321

3322 3323
extern bool zero_p (tree);
extern bool cst_and_fits_in_hwi (tree);
3324
extern tree num_ending_zeros (tree);
3325

3326 3327
/* staticp (tree x) is nonzero if X is a reference to data allocated
   at a fixed address in memory.  Returns the outermost data.  */
Richard Stallman committed
3328

3329
extern tree staticp (tree);
Richard Stallman committed
3330 3331 3332 3333 3334

/* save_expr (EXP) returns an expression equivalent to EXP
   but it can be used multiple times within context CTX
   and only evaluate EXP once.  */

3335
extern tree save_expr (tree);
Richard Stallman committed
3336

3337 3338 3339
/* Look inside EXPR and into any simple arithmetic operations.  Return
   the innermost non-arithmetic node.  */

3340
extern tree skip_simple_arithmetic (tree);
3341

3342 3343
/* Return which tree structure is used by T.  */

3344
enum tree_node_structure_enum tree_node_structure (tree);
3345

3346 3347 3348 3349 3350 3351
/* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
   or offset that depends on a field within a record.

   Note that we only allow such expressions within simple arithmetic
   or a COND_EXPR.  */

3352
extern bool contains_placeholder_p (tree);
3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363

/* This macro calls the above function but short-circuits the common
   case of a constant to save time.  Also check for null.  */

#define CONTAINS_PLACEHOLDER_P(EXP) \
  ((EXP) != 0 && ! TREE_CONSTANT (EXP) && contains_placeholder_p (EXP))

/* Return 1 if any part of the computation of TYPE involves a PLACEHOLDER_EXPR.
   This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and field
   positions.  */

3364
extern bool type_contains_placeholder_p (tree);
3365 3366 3367 3368 3369 3370

/* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
   return a tree with all occurrences of references to F in a
   PLACEHOLDER_EXPR replaced by R.   Note that we assume here that EXP
   contains only arithmetic expressions.  */

3371
extern tree substitute_in_expr (tree, tree, tree);
3372

3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390
/* This macro calls the above function but short-circuits the common
   case of a constant to save time and also checks for NULL.  */

#define SUBSTITUTE_IN_EXPR(EXP, F, R) \
  ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP) : substitute_in_expr (EXP, F, R))

/* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
   for it within OBJ, a tree that is an object or a chain of references.  */

extern tree substitute_placeholder_in_expr (tree, tree);

/* This macro calls the above function but short-circuits the common
   case of a constant to save time and also checks for NULL.  */

#define SUBSTITUTE_PLACEHOLDER_IN_EXPR(EXP, OBJ) \
  ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP)	\
   : substitute_placeholder_in_expr (EXP, OBJ))

3391 3392 3393 3394 3395 3396
/* variable_size (EXP) is like save_expr (EXP) except that it
   is for the special case of something that is part of a
   variable size for a data type.  It makes special arrangements
   to compute the value at the right time when the data type
   belongs to a function parameter.  */

3397
extern tree variable_size (tree);
3398

3399
/* stabilize_reference (EXP) returns a reference equivalent to EXP
Richard Stallman committed
3400 3401 3402
   but it can be used multiple times
   and only evaluate the subexpressions once.  */

3403
extern tree stabilize_reference (tree);
Richard Stallman committed
3404

3405 3406 3407 3408
/* Subroutine of stabilize_reference; this is called for subtrees of
   references.  Any expression with side-effects must be put in a SAVE_EXPR
   to ensure that it is only evaluated once.  */

3409
extern tree stabilize_reference_1 (tree);
3410

Richard Stallman committed
3411 3412 3413 3414 3415
/* Return EXP, stripped of any conversions to wider types
   in such a way that the result of converting to type FOR_TYPE
   is the same as if EXP were converted to FOR_TYPE.
   If FOR_TYPE is 0, it signifies EXP's type.  */

3416
extern tree get_unwidened (tree, tree);
Richard Stallman committed
3417 3418 3419 3420 3421 3422

/* Return OP or a simpler expression for a narrower value
   which can be sign-extended or zero-extended to give back OP.
   Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
   or 0 if the value should be sign-extended.  */

3423
extern tree get_narrower (tree, int *);
Richard Stallman committed
3424 3425 3426 3427 3428

/* Given an expression EXP that may be a COMPONENT_REF or an ARRAY_REF,
   look for nested component-refs or array-refs at constant positions
   and find the ultimate containing object, which is returned.  */

3429
extern tree get_inner_reference (tree, HOST_WIDE_INT *, HOST_WIDE_INT *,
3430 3431
				 tree *, enum machine_mode *, int *, int *,
				 bool);
Richard Stallman committed
3432

3433 3434
/* Return 1 if T is an expression that get_inner_reference handles.  */

3435
extern int handled_component_p (tree);
3436

3437 3438 3439 3440 3441 3442 3443 3444 3445 3446
/* Return a tree of sizetype representing the size, in bytes, of the element
   of EXP, an ARRAY_REF.  */

extern tree array_ref_element_size (tree);

/* Return a tree representing the lower bound of the array mentioned in
   EXP, an ARRAY_REF.  */

extern tree array_ref_low_bound (tree);

3447 3448 3449 3450 3451
/* Return a tree representing the upper bound of the array mentioned in
   EXP, an ARRAY_REF.  */

extern tree array_ref_up_bound (tree);

3452 3453 3454 3455 3456
/* Return a tree representing the offset, in bytes, of the field referenced
   by EXP.  This does not include any offset in DECL_FIELD_BIT_OFFSET.  */

extern tree component_ref_field_offset (tree);

3457 3458 3459
/* Given a DECL or TYPE, return the scope in which it was declared, or
   NUL_TREE if there is no containing scope.  */

3460
extern tree get_containing_scope (tree);
3461

Richard Stallman committed
3462 3463
/* Return the FUNCTION_DECL which provides this _DECL with its context,
   or zero if none.  */
3464
extern tree decl_function_context (tree);
Richard Stallman committed
3465

3466 3467
/* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides
   this _DECL with its context, or zero if none.  */
3468
extern tree decl_type_context (tree);
Richard Stallman committed
3469

Jim Wilson committed
3470
/* Return 1 if EXPR is the real constant zero.  */
3471
extern int real_zerop (tree);
Richard Stallman committed
3472 3473 3474

/* Declare commonly used variables for tree structure.  */

3475 3476 3477 3478 3479
/* Nonzero means lvalues are limited to those valid in pedantic ANSI C.
   Zero means allow extended lvalues.  */

extern int pedantic_lvalues;

3480
/* Points to the FUNCTION_DECL of the function whose body we are reading.  */
Richard Stallman committed
3481

3482
extern GTY(()) tree current_function_decl;
Richard Stallman committed
3483

3484
/* Nonzero means a FUNC_BEGIN label was emitted.  */
3485
extern GTY(()) const char * current_function_func_begin_label;
Richard Stallman committed
3486

Brendan Kehoe committed
3487
/* In tree.c */
3488
extern unsigned crc32_string (unsigned, const char *);
3489 3490 3491
extern void clean_symbol_name (char *);
extern tree get_file_function_name_long (const char *);
extern tree get_callee_fndecl (tree);
3492
extern void change_decl_assembler_name (tree, tree);
3493
extern int type_num_arguments (tree);
3494 3495
extern bool associative_tree_code (enum tree_code);
extern bool commutative_tree_code (enum tree_code);
3496 3497
extern tree upper_bound_in_type (tree, tree);
extern tree lower_bound_in_type (tree, tree);
3498
extern int operand_equal_for_phi_arg_p (tree, tree);
Brendan Kehoe committed
3499

Richard Stallman committed
3500 3501
/* In stmt.c */

3502
extern void expand_expr_stmt (tree);
3503
extern int warn_if_unused_value (tree, location_t);
3504 3505 3506
extern void expand_label (tree);
extern void expand_goto (tree);

3507 3508
extern rtx expand_stack_save (void);
extern void expand_stack_restore (tree);
3509 3510 3511
extern void expand_return (tree);
extern int is_body_block (tree);

3512
/* In tree-eh.c */
3513
extern void using_eh_for_cleanups (void);
Richard Stallman committed
3514 3515 3516

/* In fold-const.c */

3517 3518 3519 3520 3521 3522
/* Fold constants as much as possible in an expression.
   Returns the simplified expression.
   Acts only on the top level of the expression;
   if the argument itself cannot be simplified, its
   subexpressions are not changed.  */

3523
extern tree fold (tree);
3524 3525 3526
extern tree fold_unary (enum tree_code, tree, tree);
extern tree fold_binary (enum tree_code, tree, tree, tree);
extern tree fold_ternary (enum tree_code, tree, tree, tree, tree);
3527 3528 3529
extern tree fold_build1 (enum tree_code, tree, tree);
extern tree fold_build2 (enum tree_code, tree, tree, tree);
extern tree fold_build3 (enum tree_code, tree, tree, tree, tree);
3530
extern tree fold_initializer (tree);
3531
extern tree fold_convert (tree, tree);
3532
extern tree fold_single_bit_test (enum tree_code, tree, tree, tree);
3533
extern tree fold_ignored_result (tree);
3534
extern tree fold_abs_const (tree, tree);
3535

3536 3537
extern tree force_fit_type (tree, int, bool, bool);

3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564
extern int add_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
		       unsigned HOST_WIDE_INT, HOST_WIDE_INT,
		       unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
extern int neg_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
		       unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
extern int mul_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
		       unsigned HOST_WIDE_INT, HOST_WIDE_INT,
		       unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
extern void lshift_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
			   HOST_WIDE_INT, unsigned int,
			   unsigned HOST_WIDE_INT *, HOST_WIDE_INT *, int);
extern void rshift_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
			   HOST_WIDE_INT, unsigned int,
			   unsigned HOST_WIDE_INT *, HOST_WIDE_INT *, int);
extern void lrotate_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
			    HOST_WIDE_INT, unsigned int,
			    unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
extern void rrotate_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
			    HOST_WIDE_INT, unsigned int,
			    unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);

extern int div_and_round_double (enum tree_code, int, unsigned HOST_WIDE_INT,
				 HOST_WIDE_INT, unsigned HOST_WIDE_INT,
				 HOST_WIDE_INT, unsigned HOST_WIDE_INT *,
				 HOST_WIDE_INT *, unsigned HOST_WIDE_INT *,
				 HOST_WIDE_INT *);

3565 3566 3567 3568 3569 3570 3571 3572
enum operand_equal_flag
{
  OEP_ONLY_CONST = 1,
  OEP_PURE_SAME = 2
};

extern int operand_equal_p (tree, tree, unsigned int);

3573
extern tree omit_one_operand (tree, tree, tree);
3574
extern tree omit_two_operands (tree, tree, tree, tree);
3575
extern tree invert_truthvalue (tree);
3576 3577
extern tree fold_unary_to_constant (enum tree_code, tree, tree);
extern tree fold_binary_to_constant (enum tree_code, tree, tree, tree);
3578 3579
extern tree fold_read_from_constant_string (tree);
extern tree int_const_binop (enum tree_code, tree, tree, int);
3580
extern tree build_fold_addr_expr (tree);
3581 3582
extern tree fold_build_cleanup_point_expr (tree type, tree expr);
extern tree fold_strip_sign_ops (tree);
3583 3584
extern tree build_fold_addr_expr_with_type (tree, tree);
extern tree build_fold_indirect_ref (tree);
3585
extern tree fold_indirect_ref (tree);
3586
extern tree constant_boolean_node (int, tree);
3587
extern tree build_low_bits_mask (tree, unsigned);
3588 3589 3590
extern tree fold_complex_mult_parts (tree, tree, tree, tree, tree);
extern tree fold_complex_div_parts (tree, tree, tree, tree, tree,
				    enum tree_code);
3591

3592 3593 3594
extern bool tree_swap_operands_p (tree, tree, bool);
extern enum tree_code swap_tree_comparison (enum tree_code);

3595 3596
extern bool ptr_difference_const (tree, tree, HOST_WIDE_INT *);

3597
/* In builtins.c */
3598
extern tree fold_builtin (tree, tree, bool);
3599
extern tree fold_builtin_fputs (tree, bool, bool, tree);
3600 3601
extern tree fold_builtin_strcpy (tree, tree, tree);
extern tree fold_builtin_strncpy (tree, tree, tree);
3602
extern bool fold_builtin_next_arg (tree);
3603 3604 3605
extern enum built_in_function builtin_mathfn_code (tree);
extern tree build_function_call_expr (tree, tree);
extern tree mathfn_built_in (tree, enum built_in_function fn);
3606 3607
extern tree strip_float_extensions (tree);
extern tree c_strlen (tree, int);
3608
extern tree std_gimplify_va_arg_expr (tree, tree, tree *, tree *);
3609
extern tree build_va_arg_indirect_ref (tree);
Jim Wilson committed
3610

3611
/* In convert.c */
3612
extern tree strip_float_extensions (tree);
3613

3614
/* In alias.c */
3615 3616 3617
extern void record_component_aliases (tree);
extern HOST_WIDE_INT get_alias_set (tree);
extern int alias_sets_conflict_p (HOST_WIDE_INT, HOST_WIDE_INT);
3618
extern int alias_sets_might_conflict_p (HOST_WIDE_INT, HOST_WIDE_INT);
3619
extern int objects_must_conflict_p (tree, tree);
3620

3621
/* In tree.c */
3622 3623
extern int really_constant_p (tree);
extern int int_fits_type_p (tree, tree);
3624
extern bool variably_modified_type_p (tree, tree);
3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636
extern int tree_log2 (tree);
extern int tree_floor_log2 (tree);
extern int simple_cst_equal (tree, tree);
extern unsigned int iterative_hash_expr (tree, unsigned int);
extern int compare_tree_int (tree, unsigned HOST_WIDE_INT);
extern int type_list_equal (tree, tree);
extern int chain_member (tree, tree);
extern tree type_hash_lookup (unsigned int, tree);
extern void type_hash_add (unsigned int, tree);
extern int simple_cst_list_equal (tree, tree);
extern void dump_tree_statistics (void);
extern void expand_function_end (void);
3637
extern void expand_function_start (tree);
3638
extern void recompute_tree_invarant_for_addr_expr (tree);
3639
extern bool is_global_var (tree t);
3640
extern bool needs_to_live_in_memory (tree);
3641
extern tree reconstruct_complex_type (tree, tree);
3642 3643 3644 3645 3646

extern int real_onep (tree);
extern int real_twop (tree);
extern int real_minus_onep (tree);
extern void init_ttree (void);
3647
extern void build_common_tree_nodes (bool, bool);
3648
extern void build_common_tree_nodes_2 (int);
3649
extern void build_common_builtin_nodes (void);
3650
extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
3651
extern tree build_range_type (tree, tree, tree);
3652 3653
extern HOST_WIDE_INT int_cst_value (tree);
extern tree tree_fold_gcd (tree, tree);
3654
extern tree build_addr (tree);
3655

3656 3657 3658
extern bool fields_compatible_p (tree, tree);
extern tree find_compatible_field (tree, tree);

3659
/* In function.c */
3660 3661 3662 3663
extern void expand_main_function (void);
extern void init_dummy_function_start (void);
extern void expand_dummy_function_end (void);
extern void init_function_for_compilation (void);
3664
extern void allocate_struct_function (tree);
3665
extern void init_function_start (tree);
3666
extern bool use_register_for_decl (tree);
3667
extern void setjmp_vars_warning (tree);
3668 3669 3670 3671 3672 3673
extern void setjmp_args_warning (void);
extern void init_temp_slots (void);
extern void free_temp_slots (void);
extern void pop_temp_slots (void);
extern void push_temp_slots (void);
extern void preserve_temp_slots (rtx);
DJ Delorie committed
3674
extern int aggregate_value_p (tree, tree);
3675 3676 3677 3678
extern void push_function_context (void);
extern void pop_function_context (void);
extern void push_function_context_to (tree);
extern void pop_function_context_from (tree);
3679
extern tree gimplify_parameters (void);
3680 3681 3682

/* In print-rtl.c */
#ifdef BUFSIZ
3683
extern void print_rtl (FILE *, rtx);
3684 3685 3686
#endif

/* In print-tree.c */
3687
extern void debug_tree (tree);
3688
#ifdef BUFSIZ
3689 3690 3691
extern void print_node (FILE *, const char *, tree, int);
extern void print_node_brief (FILE *, const char *, tree, int);
extern void indent_to (FILE *, int);
3692 3693
#endif

3694 3695
/* In tree-inline.c:  */
extern bool debug_find_tree (tree, tree);
3696 3697 3698
/* This is in tree-inline.c since the routine uses
   data structures from the inliner.  */
extern tree unsave_expr_now (tree);
3699

3700
/* In emit-rtl.c */
3701
extern rtx emit_line_note (location_t);
3702

3703
/* In calls.c */
3704

3705 3706 3707
/* Nonzero if this is a call to a function whose return value depends
   solely on its arguments, has no side effects, and does not read
   global memory.  */
3708
#define ECF_CONST		1
3709
/* Nonzero if this call will never return.  */
3710 3711 3712 3713 3714 3715 3716 3717 3718
#define ECF_NORETURN		2
/* Nonzero if this is a call to malloc or a related function.  */
#define ECF_MALLOC		4
/* Nonzero if it is plausible that this is a call to alloca.  */
#define ECF_MAY_BE_ALLOCA	8
/* Nonzero if this is a call to a function that won't throw an exception.  */
#define ECF_NOTHROW		16
/* Nonzero if this is a call to setjmp or a related function.  */
#define ECF_RETURNS_TWICE	32
3719 3720
/* Nonzero if this call replaces the current stack frame.  */
#define ECF_SIBCALL		64
3721 3722
/* Nonzero if this is a call to "pure" function (like const function,
   but may read memory.  */
3723
#define ECF_PURE		128
3724 3725
/* Nonzero if this is a call to a function that returns with the stack
   pointer depressed.  */
3726
#define ECF_SP_DEPRESSED	256
3727
/* Create libcall block around the call.  */
3728
#define ECF_LIBCALL_BLOCK	512
3729 3730 3731
/* Function does not read or write memory (but may have side effects, so
   it does not necessarily fit ECF_CONST).  */
#define ECF_NOVOPS		1024
3732

3733
extern int flags_from_decl_or_type (tree);
3734
extern int call_expr_flags (tree);
3735

3736 3737
extern int setjmp_call_p (tree);
extern bool alloca_call_p (tree);
3738 3739
extern bool must_pass_in_stack_var_size (enum machine_mode, tree);
extern bool must_pass_in_stack_var_size_or_pad (enum machine_mode, tree);
3740

3741
/* In attribs.c.  */
3742 3743 3744 3745 3746 3747 3748 3749 3750

/* Process the attributes listed in ATTRIBUTES and install them in *NODE,
   which is either a DECL (including a TYPE_DECL) or a TYPE.  If a DECL,
   it should be modified in place; if a TYPE, a copy should be created
   unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS.  FLAGS gives further
   information, in the form of a bitwise OR of flags in enum attribute_flags
   from tree.h.  Depending on these flags, some attributes may be
   returned to be applied at a later stage (for example, to apply
   a decl attribute to the declaration rather than to its type).  */
3751
extern tree decl_attributes (tree *, tree, int);
3752

3753
/* In integrate.c */
3754 3755
extern void set_decl_abstract_flags (tree, int);
extern void set_decl_origin_self (tree);
3756 3757

/* In stor-layout.c */
3758
extern void set_min_and_max_values_for_integral_type (tree, int, bool);
3759 3760
extern void fixup_signed_type (tree);
extern void internal_reference_types (void);
3761 3762
extern unsigned int update_alignment_for_field (record_layout_info, tree,
                                                unsigned int);
3763
/* varasm.c */
3764
extern void make_decl_rtl (tree);
3765 3766 3767 3768 3769
extern void make_decl_one_only (tree);
extern int supports_one_only (void);
extern void variable_section (tree, int);
extern void resolve_unique_section (tree, int, int);
extern void mark_referenced (tree);
3770
extern void mark_decl_referenced (tree);
3771
extern void notice_global_symbol (tree);
3772
extern void set_user_assembler_name (tree, const char *);
3773
extern void process_pending_assemble_externals (void);
3774 3775
extern void finish_aliases_1 (void);
extern void finish_aliases_2 (void);
3776 3777

/* In stmt.c */
3778 3779 3780
extern void expand_computed_goto (tree);
extern bool parse_output_constraint (const char **, int, int, int,
				     bool *, bool *, bool *);
3781 3782
extern bool parse_input_constraint (const char **, int, int, int, int,
				    const char * const *, bool *, bool *);
3783
extern void expand_asm_expr (tree);
3784
extern tree resolve_asm_operand_names (tree, tree, tree);
3785
extern void expand_case (tree);
3786 3787
extern void expand_decl (tree);
extern void expand_anon_union_decl (tree, tree, tree);
3788 3789 3790 3791
#ifdef HARD_CONST
/* Silly ifdef to avoid having all includers depend on hard-reg-set.h.  */
extern bool decl_overlaps_hard_reg_set_p (tree, const HARD_REG_SET);
#endif
3792 3793 3794 3795 3796 3797

/* In gimplify.c.  */
extern tree create_artificial_label (void);
extern void gimplify_function_tree (tree);
extern const char *get_name (tree);
extern tree unshare_expr (tree);
3798
extern void sort_case_labels (tree);
3799

3800 3801
/* If KIND=='I', return a suitable global initializer (constructor) name.
   If KIND=='D', return a suitable global clean-up (destructor) name.  */
3802
extern tree get_file_function_name (int);
3803 3804 3805 3806 3807

/* Interface of the DWARF2 unwind info support.  */

/* Generate a new label for the CFI info to refer to.  */

3808
extern char *dwarf2out_cfi_label (void);
3809 3810 3811

/* Entry point to update the canonical frame address (CFA).  */

3812
extern void dwarf2out_def_cfa (const char *, unsigned, HOST_WIDE_INT);
3813 3814 3815

/* Add the CFI for saving a register window.  */

3816
extern void dwarf2out_window_save (const char *);
3817 3818 3819 3820

/* Add a CFI to update the running total of the size of arguments pushed
   onto the stack.  */

3821
extern void dwarf2out_args_size (const char *, HOST_WIDE_INT);
3822 3823 3824

/* Entry point for saving a register to the stack.  */

3825
extern void dwarf2out_reg_save (const char *, unsigned, HOST_WIDE_INT);
3826 3827 3828

/* Entry point for saving the return address in the stack.  */

3829
extern void dwarf2out_return_save (const char *, HOST_WIDE_INT);
3830 3831 3832

/* Entry point for saving the return address in a register.  */

3833
extern void dwarf2out_return_reg (const char *, unsigned);
3834

3835 3836
/* In tree-inline.c  */

3837 3838 3839 3840
/* The type of a set of already-visited pointers.  Functions for creating
   and manipulating it are declared in pointer-set.h */
struct pointer_set_t;

3841
/* The type of a callback function for walking over tree structure.  */
3842

3843
typedef tree (*walk_tree_fn) (tree *, int *, void *);
3844
extern tree walk_tree (tree*, walk_tree_fn, void*, struct pointer_set_t*);
3845
extern tree walk_tree_without_duplicates (tree*, walk_tree_fn, void*);
3846

3847 3848 3849
/* In tree-dump.c */

/* Different tree dump places.  When you add new tree dump places,
3850
   extend the DUMP_FILES array in tree-dump.c.  */
3851 3852
enum tree_dump_index
{
3853 3854 3855
  TDI_none,			/* No dump */
  TDI_tu,			/* dump the whole translation unit.  */
  TDI_class,			/* dump class hierarchy.  */
3856
  TDI_original,			/* dump each function before optimizing it */
3857 3858
  TDI_generic,			/* dump each function after genericizing it */
  TDI_nested,			/* dump each function after unnesting it */
3859 3860
  TDI_inlined,			/* dump each function after inlining
				   within it.  */
3861
  TDI_vcg,			/* create a VCG graph file for each
3862
				   function's flowgraph.  */
3863 3864
  TDI_tree_all,                 /* enable all the GENERIC/GIMPLE dumps.  */
  TDI_rtl_all,                  /* enable all the RTL dumps.  */
3865 3866 3867
  TDI_ipa_all,                  /* enable all the IPA dumps.  */

  TDI_cgraph,                   /* dump function call graph.  */
3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906

  DFI_MIN,                      /* For now, RTL dumps are placed here.  */
  DFI_sibling = DFI_MIN,
  DFI_eh,
  DFI_jump,
  DFI_cse,
  DFI_gcse,
  DFI_loop,
  DFI_bypass,
  DFI_cfg,
  DFI_bp,
  DFI_vpt,
  DFI_ce1,
  DFI_tracer,
  DFI_loop2,
  DFI_web,
  DFI_cse2,
  DFI_life,
  DFI_combine,
  DFI_ce2,
  DFI_regmove,
  DFI_sms,
  DFI_sched,
  DFI_lreg,
  DFI_greg,
  DFI_postreload,
  DFI_gcse2,
  DFI_flow2,
  DFI_peephole2,
  DFI_ce3,
  DFI_rnreg,
  DFI_bbro,
  DFI_branch_target_load,
  DFI_sched2,
  DFI_stack,
  DFI_vartrack,
  DFI_mach,
  DFI_dbr,

3907 3908 3909
  TDI_end
};

3910 3911
/* Bit masks to control dumping. Not all values are applicable to
   all dumps. Add new ones at the end. When you define new
3912 3913 3914
   values, extend the DUMP_OPTIONS array in tree-dump.c */
#define TDF_ADDRESS	(1 << 0)	/* dump node addresses */
#define TDF_SLIM	(1 << 1)	/* don't go wild following links */
3915 3916 3917 3918 3919 3920 3921 3922 3923 3924
#define TDF_RAW  	(1 << 2)	/* don't unparse the function */
#define TDF_DETAILS	(1 << 3)	/* show more detailed info about
					   each pass */
#define TDF_STATS	(1 << 4)	/* dump various statistics about
					   each pass */
#define TDF_BLOCKS	(1 << 5)	/* display basic block boundaries */
#define TDF_VOPS	(1 << 6)	/* display virtual operands */
#define TDF_LINENO	(1 << 7)	/* display statement line numbers */
#define TDF_UID		(1 << 8)	/* display decl UIDs */

3925 3926
#define TDF_TREE	(1 << 9)	/* is a tree dump */
#define TDF_RTL		(1 << 10)	/* is a RTL dump */
3927
#define TDF_IPA		(1 << 11)	/* is an IPA dump */
3928
#define TDF_STMTADDR	(1 << 12)	/* Address of stmt.  */
3929 3930 3931

typedef struct dump_info *dump_info_p;

3932
extern char *get_dump_file_name (enum tree_dump_index);
3933 3934
extern int dump_flag (dump_info_p, int, tree);
extern int dump_enabled_p (enum tree_dump_index);
3935
extern int dump_initialized_p (enum tree_dump_index);
3936 3937 3938 3939 3940
extern FILE *dump_begin (enum tree_dump_index, int *);
extern void dump_end (enum tree_dump_index, FILE *);
extern void dump_node (tree, int, FILE *);
extern int dump_switch_p (const char *);
extern const char *dump_flag_name (enum tree_dump_index);
3941 3942
/* Assign the RTX to declaration.  */

3943
extern void set_decl_rtl (tree, rtx);
3944
extern void set_decl_incoming_rtl (tree, rtx);
3945

3946
/* Enum and arrays used for tree allocation stats.
3947
   Keep in sync with tree.c:tree_node_kind_names.  */
3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960
typedef enum
{
  d_kind,
  t_kind,
  b_kind,
  s_kind,
  r_kind,
  e_kind,
  c_kind,
  id_kind,
  perm_list_kind,
  temp_list_kind,
  vec_kind,
3961
  binfo_kind,
3962 3963
  phi_kind,
  ssa_name_kind,
3964 3965 3966 3967 3968 3969 3970 3971
  x_kind,
  lang_decl,
  lang_type,
  all_kinds
} tree_node_kind;

extern int tree_node_counts[];
extern int tree_node_sizes[];
3972 3973 3974 3975 3976

/* True if we are in gimple form and the actions of the folders need to
   be restricted.  False if we are not in gimple form and folding is not
   restricted to creating gimple expressions.  */
extern bool in_gimple_form;
3977

3978 3979 3980
/* In tree-ssa-threadupdate.c.  */
extern bool thread_through_all_blocks (void);

3981 3982 3983
/* In tree-gimple.c.  */
extern tree get_base_address (tree t);

3984 3985 3986
/* In tree-vectorizer.c.  */
extern void vect_set_verbosity_level (const char *);

3987
#endif  /* GCC_TREE_H  */