00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef GCC_TREE_H
00029 #define GCC_TREE_H
00030
00031 #include "machmode.h"
00032 #include "version.h"
00033 #include "location.h"
00034
00035
00036
00037 #define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM,
00038
00039 enum tree_code {
00040 #include "tree.def"
00041
00042 LAST_AND_UNUSED_TREE_CODE
00043
00044 };
00045
00046 #undef DEFTREECODE
00047
00048 #ifdef SGI_MONGOOSE
00049 typedef unsigned int LABEL_IDX;
00050 struct mongoose_gcc_DST_IDX {unsigned int block; unsigned int offset; };
00051 #if defined(__cplusplus)
00052 class ST;
00053 #else
00054 typedef struct st ST;
00055 #endif
00056 #endif
00057
00058
00059 #define NUM_TREE_CODES ((int) LAST_AND_UNUSED_TREE_CODE)
00060
00061
00062
00063
00064
00065
00066
00067
00068 #define MAX_TREE_CODES 256
00069 extern const char tree_code_type[];
00070 #define TREE_CODE_CLASS(CODE) tree_code_type[(int) (CODE)]
00071
00072
00073
00074
00075 #define IS_EXPR_CODE_CLASS(CLASS) \
00076 ((CLASS) == '<' || (CLASS) == '1' || (CLASS) == '2' || (CLASS) == 'e')
00077
00078
00079
00080 extern const unsigned char tree_code_length[];
00081 #define TREE_CODE_LENGTH(CODE) tree_code_length[(int) (CODE)]
00082
00083
00084
00085 extern const char *const tree_code_name[];
00086
00087
00088
00089 enum built_in_class
00090 {
00091 NOT_BUILT_IN = 0,
00092 BUILT_IN_FRONTEND,
00093 BUILT_IN_MD,
00094 BUILT_IN_NORMAL
00095 };
00096
00097
00098 extern const char *const built_in_class_names[4];
00099
00100
00101
00102
00103 #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT) ENUM,
00104 enum built_in_function
00105 {
00106 #include "builtins.def"
00107
00108
00109 END_BUILTINS
00110 };
00111 #undef DEF_BUILTIN
00112
00113
00114 extern const char *const built_in_names[(int) END_BUILTINS];
00115
00116
00117 extern tree built_in_decls[(int) END_BUILTINS];
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141 struct tree_common GTY(())
00142 {
00143 tree chain;
00144 tree type;
00145
00146 ENUM_BITFIELD(tree_code) code : 8;
00147
00148 unsigned side_effects_flag : 1;
00149 unsigned constant_flag : 1;
00150 unsigned addressable_flag : 1;
00151 unsigned volatile_flag : 1;
00152 unsigned readonly_flag : 1;
00153 unsigned unsigned_flag : 1;
00154 unsigned asm_written_flag: 1;
00155 unsigned unused_0 : 1;
00156
00157 unsigned used_flag : 1;
00158 unsigned nothrow_flag : 1;
00159 unsigned static_flag : 1;
00160 unsigned public_flag : 1;
00161 unsigned private_flag : 1;
00162 unsigned protected_flag : 1;
00163 unsigned bounded_flag : 1;
00164 unsigned deprecated_flag : 1;
00165
00166 unsigned lang_flag_0 : 1;
00167 unsigned lang_flag_1 : 1;
00168 unsigned lang_flag_2 : 1;
00169 unsigned lang_flag_3 : 1;
00170 unsigned lang_flag_4 : 1;
00171 unsigned lang_flag_5 : 1;
00172 unsigned lang_flag_6 : 1;
00173 unsigned unused_1 : 1;
00174 #if defined(TARG_SL)
00175 unsigned sbuf : 1;
00176 unsigned sdram : 1;
00177 unsigned v1buf : 1;
00178 unsigned v2buf : 1;
00179 unsigned v4buf : 1;
00180 #endif // TARG_SL
00181 };
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306 #define TREE_CODE(NODE) ((enum tree_code) (NODE)->common.code)
00307 #define TREE_SET_CODE(NODE, VALUE) \
00308 ((NODE)->common.code = (ENUM_BITFIELD (tree_code)) (VALUE))
00309
00310
00311
00312 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
00313
00314 #define TREE_CHECK(t, code) __extension__ \
00315 ({ const tree __t = (t); \
00316 if (TREE_CODE(__t) != (code)) \
00317 tree_check_failed (__t, code, __FILE__, __LINE__, __FUNCTION__); \
00318 __t; })
00319 #define TREE_CLASS_CHECK(t, class) __extension__ \
00320 ({ const tree __t = (t); \
00321 if (TREE_CODE_CLASS(TREE_CODE(__t)) != (class)) \
00322 tree_class_check_failed (__t, class, __FILE__, __LINE__, \
00323 __FUNCTION__); \
00324 __t; })
00325
00326
00327 #define CST_OR_CONSTRUCTOR_CHECK(t) __extension__ \
00328 ({ const tree __t = (t); \
00329 enum tree_code const __c = TREE_CODE(__t); \
00330 if (__c != CONSTRUCTOR && TREE_CODE_CLASS(__c) != 'c') \
00331 tree_check_failed (__t, CONSTRUCTOR, __FILE__, __LINE__, \
00332 __FUNCTION__); \
00333 __t; })
00334 #define EXPR_CHECK(t) __extension__ \
00335 ({ const tree __t = (t); \
00336 char const __c = TREE_CODE_CLASS(TREE_CODE(__t)); \
00337 if (__c != 'r' && __c != 's' && __c != '<' \
00338 && __c != '1' && __c != '2' && __c != 'e') \
00339 tree_class_check_failed (__t, 'e', __FILE__, __LINE__, \
00340 __FUNCTION__); \
00341 __t; })
00342
00343 #define TREE_VEC_ELT_CHECK(t, i) __extension__ \
00344 (*({const tree __t = t; \
00345 const int __i = (i); \
00346 if (TREE_CODE (__t) != TREE_VEC) \
00347 tree_check_failed (__t, TREE_VEC, \
00348 __FILE__, __LINE__, __FUNCTION__); \
00349 if (__i < 0 || __i >= __t->vec.length) \
00350 tree_vec_elt_check_failed (__i, __t->vec.length, \
00351 __FILE__, __LINE__, __FUNCTION__); \
00352 &__t->vec.a[__i]; }))
00353
00354 extern void tree_check_failed PARAMS ((const tree, enum tree_code,
00355 const char *, int, const char *))
00356 ATTRIBUTE_NORETURN;
00357 extern void tree_class_check_failed PARAMS ((const tree, int,
00358 const char *, int, const char *))
00359 ATTRIBUTE_NORETURN;
00360 extern void tree_vec_elt_check_failed PARAMS ((int, int, const char *,
00361 int, const char *))
00362 ATTRIBUTE_NORETURN;
00363
00364 #else
00365
00366 #define TREE_CHECK(t, code) (t)
00367 #define TREE_CLASS_CHECK(t, code) (t)
00368 #define CST_OR_CONSTRUCTOR_CHECK(t) (t)
00369 #define EXPR_CHECK(t) (t)
00370 #define TREE_VEC_ELT_CHECK(t, i) ((t)->vec.a[i])
00371
00372 #endif
00373
00374 #include "tree-check.h"
00375
00376 #define TYPE_CHECK(tree) TREE_CLASS_CHECK (tree, 't')
00377 #define DECL_CHECK(tree) TREE_CLASS_CHECK (tree, 'd')
00378 #define CST_CHECK(tree) TREE_CLASS_CHECK (tree, 'c')
00379
00380
00381
00382
00383
00384 #define TREE_TYPE(NODE) ((NODE)->common.type)
00385
00386
00387
00388 #define TYPE_HASH(TYPE) ((size_t) (TYPE) & 0777777)
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399 #define TREE_CHAIN(NODE) ((NODE)->common.chain)
00400
00401
00402
00403
00404 #define STRIP_NOPS(EXP) \
00405 while ((TREE_CODE (EXP) == NOP_EXPR \
00406 || TREE_CODE (EXP) == CONVERT_EXPR \
00407 || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
00408 && TREE_OPERAND (EXP, 0) != error_mark_node \
00409 && (TYPE_MODE (TREE_TYPE (EXP)) \
00410 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
00411 (EXP) = TREE_OPERAND (EXP, 0)
00412
00413
00414
00415 #define STRIP_SIGN_NOPS(EXP) \
00416 while ((TREE_CODE (EXP) == NOP_EXPR \
00417 || TREE_CODE (EXP) == CONVERT_EXPR \
00418 || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
00419 && TREE_OPERAND (EXP, 0) != error_mark_node \
00420 && (TYPE_MODE (TREE_TYPE (EXP)) \
00421 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0)))) \
00422 && (TREE_UNSIGNED (TREE_TYPE (EXP)) \
00423 == TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
00424 (EXP) = TREE_OPERAND (EXP, 0)
00425
00426
00427
00428 #define STRIP_TYPE_NOPS(EXP) \
00429 while ((TREE_CODE (EXP) == NOP_EXPR \
00430 || TREE_CODE (EXP) == CONVERT_EXPR \
00431 || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
00432 && TREE_OPERAND (EXP, 0) != error_mark_node \
00433 && (TREE_TYPE (EXP) \
00434 == TREE_TYPE (TREE_OPERAND (EXP, 0)))) \
00435 (EXP) = TREE_OPERAND (EXP, 0)
00436
00437
00438
00439
00440 #define INTEGRAL_TYPE_P(TYPE) \
00441 (TREE_CODE (TYPE) == INTEGER_TYPE || TREE_CODE (TYPE) == ENUMERAL_TYPE \
00442 || TREE_CODE (TYPE) == BOOLEAN_TYPE || TREE_CODE (TYPE) == CHAR_TYPE)
00443
00444
00445
00446
00447 #define FLOAT_TYPE_P(TYPE) \
00448 (TREE_CODE (TYPE) == REAL_TYPE \
00449 || (TREE_CODE (TYPE) == COMPLEX_TYPE \
00450 && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE))
00451
00452
00453
00454 #define AGGREGATE_TYPE_P(TYPE) \
00455 (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \
00456 || TREE_CODE (TYPE) == UNION_TYPE || TREE_CODE (TYPE) == QUAL_UNION_TYPE \
00457 || TREE_CODE (TYPE) == SET_TYPE)
00458
00459
00460
00461
00462 #define POINTER_TYPE_P(TYPE) \
00463 (TREE_CODE (TYPE) == POINTER_TYPE || TREE_CODE (TYPE) == REFERENCE_TYPE)
00464
00465
00466
00467 #define BOUNDED_INDIRECT_TYPE_P(TYPE) \
00468 (TREE_CODE (TYPE) == RECORD_TYPE && TREE_TYPE (TYPE))
00469
00470
00471
00472 #define BOUNDED_POINTER_TYPE_P(TYPE) \
00473 (BOUNDED_INDIRECT_TYPE_P (TYPE) \
00474 && TREE_CODE (TYPE_BOUNDED_SUBTYPE (TYPE)) == POINTER_TYPE)
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488 #define BOUNDED_REFERENCE_TYPE_P(TYPE) \
00489 (BOUNDED_INDIRECT_TYPE_P (TYPE) \
00490 && TREE_CODE (TYPE_BOUNDED_SUBTYPE (TYPE)) == REFERENCE_TYPE)
00491
00492
00493
00494
00495 #define MAYBE_BOUNDED_INDIRECT_TYPE_P(TYPE) \
00496 (POINTER_TYPE_P (TYPE) || BOUNDED_INDIRECT_TYPE_P (TYPE))
00497
00498
00499
00500 #define MAYBE_BOUNDED_POINTER_TYPE_P(TYPE) \
00501 (TREE_CODE (TYPE) == POINTER_TYPE || BOUNDED_POINTER_TYPE_P (TYPE))
00502
00503
00504
00505
00506 #define MAYBE_BOUNDED_REFERENCE_TYPE_P(TYPE) \
00507 (TREE_CODE (TYPE) == REFERENCE_TYPE || BOUNDED_REFERENCE_TYPE_P (TYPE))
00508
00509
00510 #define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE)
00511
00512
00513 #define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE)
00514
00515
00516 #define COMPLETE_OR_VOID_TYPE_P(NODE) \
00517 (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE))
00518
00519
00520 #define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \
00521 (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE)))
00522
00523
00524
00525 #define TYPE_P(TYPE) (TREE_CODE_CLASS (TREE_CODE (TYPE)) == 't')
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547 #define TREE_ADDRESSABLE(NODE) ((NODE)->common.addressable_flag)
00548
00549
00550
00551
00552 #define TREE_STATIC(NODE) ((NODE)->common.static_flag)
00553
00554
00555
00556
00557 #define CLEANUP_EH_ONLY(NODE) ((NODE)->common.static_flag)
00558
00559
00560
00561 #define TREE_NO_UNUSED_WARNING(NODE) ((NODE)->common.static_flag)
00562
00563
00564
00565 #define TREE_VIA_VIRTUAL(NODE) ((NODE)->common.static_flag)
00566
00567
00568
00569
00570
00571 #define TREE_CONSTANT_OVERFLOW(NODE) ((NODE)->common.static_flag)
00572
00573
00574
00575 #define TREE_SYMBOL_REFERENCED(NODE) \
00576 (IDENTIFIER_NODE_CHECK (NODE)->common.static_flag)
00577
00578
00579
00580
00581
00582 #define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag)
00583
00584
00585
00586
00587
00588
00589 #define TREE_PUBLIC(NODE) ((NODE)->common.public_flag)
00590
00591
00592
00593
00594 #define TREE_VIA_PUBLIC(NODE) ((NODE)->common.public_flag)
00595
00596
00597 #define TREE_VIA_PRIVATE(NODE) ((NODE)->common.private_flag)
00598
00599
00600
00601
00602
00603 #define TREE_VIA_PROTECTED(NODE) ((NODE)->common.protected_flag)
00604
00605
00606
00607
00608
00609
00610 #define TREE_SIDE_EFFECTS(NODE) ((NODE)->common.side_effects_flag)
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622 #define TREE_THIS_VOLATILE(NODE) ((NODE)->common.volatile_flag)
00623
00624
00625
00626
00627
00628
00629 #define TREE_READONLY(NODE) ((NODE)->common.readonly_flag)
00630
00631
00632 #define TREE_READONLY_DECL_P(NODE) (TREE_READONLY (NODE) && DECL_P (NODE))
00633
00634
00635
00636
00637
00638 #define TREE_CONSTANT(NODE) ((NODE)->common.constant_flag)
00639
00640
00641
00642
00643 #define TREE_UNSIGNED(NODE) ((NODE)->common.unsigned_flag)
00644
00645 #define TYPE_TRAP_SIGNED(NODE) \
00646 (flag_trapv && ! TREE_UNSIGNED (TYPE_CHECK (NODE)))
00647
00648
00649
00650
00651
00652
00653
00654
00655 #define TREE_ASM_WRITTEN(NODE) ((NODE)->common.asm_written_flag)
00656
00657
00658
00659
00660
00661 #define TREE_USED(NODE) ((NODE)->common.used_flag)
00662
00663
00664
00665 #define TREE_NOTHROW(NODE) ((NODE)->common.nothrow_flag)
00666
00667
00668
00669
00670
00671
00672
00673 #define TYPE_ALIGN_OK(NODE) (TYPE_CHECK (NODE)->common.nothrow_flag)
00674
00675
00676 #define TREE_PRIVATE(NODE) ((NODE)->common.private_flag)
00677
00678
00679 #define TREE_PROTECTED(NODE) ((NODE)->common.protected_flag)
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713 #define TREE_BOUNDED(NODE) ((NODE)->common.bounded_flag)
00714
00715
00716
00717 #define TREE_DEPRECATED(NODE) ((NODE)->common.deprecated_flag)
00718
00719
00720 #define TREE_LANG_FLAG_0(NODE) ((NODE)->common.lang_flag_0)
00721 #define TREE_LANG_FLAG_1(NODE) ((NODE)->common.lang_flag_1)
00722 #define TREE_LANG_FLAG_2(NODE) ((NODE)->common.lang_flag_2)
00723 #define TREE_LANG_FLAG_3(NODE) ((NODE)->common.lang_flag_3)
00724 #define TREE_LANG_FLAG_4(NODE) ((NODE)->common.lang_flag_4)
00725 #define TREE_LANG_FLAG_5(NODE) ((NODE)->common.lang_flag_5)
00726 #define TREE_LANG_FLAG_6(NODE) ((NODE)->common.lang_flag_6)
00727
00728
00729
00730
00731
00732
00733
00734 #define TREE_INT_CST(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst)
00735 #define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low)
00736 #define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high)
00737
00738 #define INT_CST_LT(A, B) \
00739 (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B) \
00740 || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B) \
00741 && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
00742
00743 #define INT_CST_LT_UNSIGNED(A, B) \
00744 (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \
00745 < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \
00746 || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \
00747 == (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \
00748 && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
00749
00750 struct tree_int_cst GTY(())
00751 {
00752 struct tree_common common;
00753 rtx rtl;
00754
00755
00756
00757
00758 struct tree_int_cst_lowhi {
00759 unsigned HOST_WIDE_INT low;
00760 HOST_WIDE_INT high;
00761 } int_cst;
00762 };
00763
00764
00765
00766
00767
00768 #define TREE_CST_RTL(NODE) (CST_OR_CONSTRUCTOR_CHECK (NODE)->real_cst.rtl)
00769
00770
00771
00772
00773 struct real_value;
00774
00775 #define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr)
00776 #define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE))
00777
00778 struct tree_real_cst GTY(())
00779 {
00780 struct tree_common common;
00781 rtx rtl;
00782 struct real_value * real_cst_ptr;
00783 };
00784
00785
00786 #define TREE_STRING_LENGTH(NODE) (STRING_CST_CHECK (NODE)->string.length)
00787 #ifndef SGI_MONGOOSE
00788 #define TREE_STRING_POINTER(NODE) (STRING_CST_CHECK (NODE)->string.pointer)
00789 #else
00790
00791 #define TREE_STRING_POINTER(NODE) \
00792 (STRING_CST_CHECK (NODE)->string.pointer)
00793 #endif
00794 #ifdef SGI_MONGOOSE
00795 #define TREE_STRING_ST(NODE) (STRING_CST_CHECK (NODE)->string.st)
00796 #endif
00797
00798 struct tree_string GTY(())
00799 {
00800 struct tree_common common;
00801 rtx rtl;
00802 int length;
00803 const char *pointer;
00804 #ifdef SGI_MONGOOSE
00805 ST *st;
00806 #endif
00807 };
00808
00809
00810 #define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real)
00811 #define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag)
00812
00813 struct tree_complex GTY(())
00814 {
00815 struct tree_common common;
00816 rtx rtl;
00817 tree real;
00818 tree imag;
00819 };
00820
00821
00822 #ifndef SGI_MONGOOSE
00823 #define TREE_VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elements)
00824 #else
00825
00826
00827
00828 #define TREE_VECTOR_CST_ELTS(NODE) (NODE->vector.elements)
00829 #endif
00830
00831 struct tree_vector GTY(())
00832 {
00833 struct tree_common common;
00834 rtx rtl;
00835 tree elements;
00836 };
00837
00838 #include "hashtable.h"
00839
00840
00841
00842 #define IDENTIFIER_LENGTH(NODE) \
00843 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
00844 #ifndef SGI_MONGOOSE
00845 #define IDENTIFIER_POINTER(NODE) \
00846 ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
00847 #else
00848
00849 #define IDENTIFIER_POINTER(NODE) \
00850 ((char *)IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
00851 #endif
00852 #define IDENTIFIER_HASH_VALUE(NODE) \
00853 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.hash_value)
00854
00855
00856
00857
00858 #define HT_IDENT_TO_GCC_IDENT(NODE) \
00859 ((tree) ((char *) (NODE) - sizeof (struct tree_common)))
00860 #define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id)
00861
00862 struct tree_identifier GTY(())
00863 {
00864 struct tree_common common;
00865 struct ht_identifier id;
00866 };
00867
00868
00869 #define TREE_PURPOSE(NODE) (TREE_LIST_CHECK (NODE)->list.purpose)
00870 #define TREE_VALUE(NODE) (TREE_LIST_CHECK (NODE)->list.value)
00871
00872 struct tree_list GTY(())
00873 {
00874 struct tree_common common;
00875 tree purpose;
00876 tree value;
00877 };
00878
00879
00880 #define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length)
00881 #define TREE_VEC_END(NODE) \
00882 ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.length]))
00883
00884 #define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I)
00885
00886 struct tree_vec GTY(())
00887 {
00888 struct tree_common common;
00889 int length;
00890 tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1];
00891 };
00892
00893
00894
00895
00896 #define SAVE_EXPR_CONTEXT(NODE) TREE_OPERAND (SAVE_EXPR_CHECK (NODE), 1)
00897 #define SAVE_EXPR_RTL(NODE) (*(rtx *) &SAVE_EXPR_CHECK (NODE)->exp.operands[2])
00898 #define SAVE_EXPR_NOPLACEHOLDER(NODE) TREE_UNSIGNED (SAVE_EXPR_CHECK (NODE))
00899
00900
00901
00902
00903 #define SAVE_EXPR_PERSISTENT_P(NODE) TREE_ASM_WRITTEN (SAVE_EXPR_CHECK (NODE))
00904
00905
00906 #define RTL_EXPR_SEQUENCE(NODE) \
00907 (*(rtx *) &RTL_EXPR_CHECK (NODE)->exp.operands[0])
00908 #define RTL_EXPR_RTL(NODE) (*(rtx *) &RTL_EXPR_CHECK (NODE)->exp.operands[1])
00909
00910
00911 #define WITH_CLEANUP_EXPR_RTL(NODE) \
00912 (*(rtx *) &WITH_CLEANUP_EXPR_CHECK (NODE)->exp.operands[2])
00913
00914
00915 #define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND (CONSTRUCTOR_CHECK (NODE), 1)
00916
00917
00918 #define TREE_OPERAND(NODE, I) (EXPR_CHECK (NODE)->exp.operands[I])
00919 #define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->exp.complexity)
00920
00921
00922 #define LABELED_BLOCK_LABEL(NODE) \
00923 TREE_OPERAND (LABELED_BLOCK_EXPR_CHECK (NODE), 0)
00924 #define LABELED_BLOCK_BODY(NODE) \
00925 TREE_OPERAND (LABELED_BLOCK_EXPR_CHECK (NODE), 1)
00926
00927
00928 #define EXIT_BLOCK_LABELED_BLOCK(NODE) \
00929 TREE_OPERAND (EXIT_BLOCK_EXPR_CHECK (NODE), 0)
00930 #define EXIT_BLOCK_RETURN(NODE) TREE_OPERAND (EXIT_BLOCK_EXPR_CHECK (NODE), 1)
00931
00932
00933 #define LOOP_EXPR_BODY(NODE) TREE_OPERAND (LOOP_EXPR_CHECK (NODE), 0)
00934
00935
00936 #define EXPR_WFL_EMIT_LINE_NOTE(NODE) \
00937 (EXPR_WITH_FILE_LOCATION_CHECK (NODE)->common.public_flag)
00938 #define EXPR_WFL_NODE(NODE) \
00939 TREE_OPERAND (EXPR_WITH_FILE_LOCATION_CHECK (NODE), 0)
00940 #define EXPR_WFL_FILENAME_NODE(NODE) \
00941 TREE_OPERAND (EXPR_WITH_FILE_LOCATION_CHECK (NODE), 1)
00942 #define EXPR_WFL_FILENAME(NODE) \
00943 IDENTIFIER_POINTER (EXPR_WFL_FILENAME_NODE (NODE))
00944
00945 #define EXPR_WFL_LINECOL(NODE) (EXPR_CHECK (NODE)->exp.complexity)
00946 #define EXPR_WFL_LINENO(NODE) (EXPR_WFL_LINECOL (NODE) >> 12)
00947 #define EXPR_WFL_COLNO(NODE) (EXPR_WFL_LINECOL (NODE) & 0xfff)
00948 #define EXPR_WFL_SET_LINECOL(NODE, LINE, COL) \
00949 (EXPR_WFL_LINECOL(NODE) = ((LINE) << 12) | ((COL) & 0xfff))
00950
00951
00952 #define TARGET_EXPR_SLOT(NODE) TREE_OPERAND (TARGET_EXPR_CHECK (NODE), 0)
00953 #define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND (TARGET_EXPR_CHECK (NODE), 1)
00954 #define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND (TARGET_EXPR_CHECK (NODE), 2)
00955
00956 struct tree_exp GTY(())
00957 {
00958 struct tree_common common;
00959 int complexity;
00960 tree GTY ((special ("tree_exp"),
00961 desc ("TREE_CODE ((tree) &%0)")))
00962 operands[1];
00963 };
00964
00965
00966 #define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars)
00967 #define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks)
00968 #define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
00969
00970
00971 #define BLOCK_CHAIN(NODE) TREE_CHAIN (BLOCK_CHECK (NODE))
00972 #define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin)
00973 #define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag)
00974
00975
00976
00977 #define BLOCK_HANDLER_BLOCK(NODE) \
00978 (BLOCK_CHECK (NODE)->block.handler_block_flag)
00979
00980
00981
00982
00983 #define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num)
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007 #define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin)
01008 #define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain)
01009
01010 struct tree_block GTY(())
01011 {
01012 struct tree_common common;
01013
01014 unsigned handler_block_flag : 1;
01015 unsigned abstract_flag : 1;
01016 unsigned block_num : 30;
01017
01018 tree vars;
01019 tree subblocks;
01020 tree supercontext;
01021 tree abstract_origin;
01022 tree fragment_origin;
01023 tree fragment_chain;
01024 };
01025
01026
01027
01028
01029
01030
01031 #define TYPE_UID(NODE) (TYPE_CHECK (NODE)->type.uid)
01032 #define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->type.size)
01033 #define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit)
01034 #define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode)
01035 #define TYPE_VALUES(NODE) (TYPE_CHECK (NODE)->type.values)
01036 #define TYPE_DOMAIN(NODE) (TYPE_CHECK (NODE)->type.values)
01037 #define TYPE_FIELDS(NODE) (TYPE_CHECK (NODE)->type.values)
01038 #define TYPE_METHODS(NODE) (TYPE_CHECK (NODE)->type.maxval)
01039 #define TYPE_VFIELD(NODE) (TYPE_CHECK (NODE)->type.minval)
01040 #define TYPE_ARG_TYPES(NODE) (TYPE_CHECK (NODE)->type.values)
01041 #define TYPE_METHOD_BASETYPE(NODE) (TYPE_CHECK (NODE)->type.maxval)
01042 #define TYPE_OFFSET_BASETYPE(NODE) (TYPE_CHECK (NODE)->type.maxval)
01043 #define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type.pointer_to)
01044 #define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type.reference_to)
01045 #define TYPE_MIN_VALUE(NODE) (TYPE_CHECK (NODE)->type.minval)
01046 #define TYPE_MAX_VALUE(NODE) (TYPE_CHECK (NODE)->type.maxval)
01047 #define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type.precision)
01048 #define TYPE_SYMTAB_ADDRESS(NODE) (TYPE_CHECK (NODE)->type.symtab.address)
01049 #define TYPE_SYMTAB_POINTER(NODE) (TYPE_CHECK (NODE)->type.symtab.pointer)
01050 #define TYPE_SYMTAB_DIE(NODE) (TYPE_CHECK (NODE)->type.symtab.die)
01051 #define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type.name)
01052 #define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type.next_variant)
01053 #define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant)
01054 #define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context)
01055 #define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->type.lang_specific)
01056
01057
01058
01059
01060 #define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (TYPE_CHECK (NODE)->type.values)
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071 #define TYPE_MAIN_VARIANTS_PHYSICALLY_EQUAL_P(TYPE1, TYPE2) \
01072 (TYPE_MAIN_VARIANT (TYPE1) == TYPE_MAIN_VARIANT (TYPE2) \
01073 && TREE_CODE (TYPE1) == TREE_CODE (TYPE2))
01074
01075
01076
01077 #define TYPE_MAIN_PHYSICAL_VARIANT(TYPE) \
01078 (BOUNDED_POINTER_TYPE_P (TYPE) \
01079 ? build_qualified_type (TYPE, TYPE_QUAL_BOUNDED) \
01080 : TYPE_MAIN_VARIANT (TYPE))
01081
01082
01083
01084
01085 #define TYPE_BINFO(NODE) (TYPE_CHECK (NODE)->type.binfo)
01086
01087 #ifdef SGI_MONGOOSE
01088
01089 #define TYPE_TY_IDX(NODE) (TYPE_CHECK (NODE)->type.ty_idx)
01090 #define TYPE_FIELD_IDS_USED(NODE) (TYPE_CHECK (NODE)->type.field_ids_used)
01091
01092
01093
01094
01095
01096 #define TYPE_DST_IDX(NODE) (TYPE_CHECK(NODE)->type.dst_id)
01097 #endif
01098
01099
01100
01101
01102
01103
01104 #define TYPE_ALIAS_SET(NODE) (TYPE_CHECK (NODE)->type.alias_set)
01105
01106
01107
01108 #define TYPE_ALIAS_SET_KNOWN_P(NODE) (TYPE_CHECK (NODE)->type.alias_set != -1)
01109
01110
01111
01112 #define TYPE_ATTRIBUTES(NODE) (TYPE_CHECK (NODE)->type.attributes)
01113
01114
01115
01116 #define TYPE_ALIGN(NODE) (TYPE_CHECK (NODE)->type.align)
01117
01118
01119
01120 #define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align)
01121
01122
01123 #define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
01124
01125
01126
01127
01128
01129
01130
01131
01132 #define TYPE_STUB_DECL(NODE) TREE_CHAIN (NODE)
01133
01134
01135
01136
01137 #define TYPE_NO_FORCE_BLK(NODE) (TYPE_CHECK (NODE)->type.no_force_blk_flag)
01138
01139
01140
01141
01142
01143
01144
01145
01146
01147 #define TYPE_IS_SIZETYPE(NODE) \
01148 (INTEGER_TYPE_CHECK (NODE)->type.no_force_blk_flag)
01149
01150
01151
01152 #define TYPE_RETURNS_STACK_DEPRESSED(NODE) \
01153 (FUNCTION_TYPE_CHECK (NODE)->type.no_force_blk_flag)
01154
01155
01156 #define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->common.volatile_flag)
01157
01158
01159 #define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->common.readonly_flag)
01160
01161
01162
01163 #define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag)
01164
01165
01166
01167
01168 #define TYPE_BOUNDED(NODE) (TYPE_CHECK (NODE)->common.bounded_flag)
01169
01170
01171
01172
01173
01174 #if defined(TARG_SL)
01175
01176 #define TYPE_SBUF(NODE) (TYPE_CHECK (NODE)->common.sbuf)
01177 #define TYPE_SDRAM(NODE) (TYPE_CHECK (NODE)->common.sdram)
01178
01179 #define TYPE_V1BUF(NODE) (TYPE_CHECK (NODE)->common.v1buf)
01180 #define TYPE_V2BUF(NODE) (TYPE_CHECK (NODE)->common.v2buf)
01181 #define TYPE_V4BUF(NODE) (TYPE_CHECK (NODE)->common.v4buf)
01182 #define TYPE_VBUF_P(NODE) (TYPE_V1BUF(NODE)||TYPE_V2BUF(NODE)||TYPE_V4BUF(NODE))
01183 #endif // TARG_SL
01184
01185 #define TYPE_UNQUALIFIED 0x0
01186 #define TYPE_QUAL_CONST 0x1
01187 #define TYPE_QUAL_VOLATILE 0x2
01188 #define TYPE_QUAL_RESTRICT 0x4
01189 #define TYPE_QUAL_BOUNDED 0x8
01190 #if defined(TARG_SL)
01191 #define TYPE_QUAL_SBUF 0x10
01192 #define TYPE_QUAL_SDRAM 0x20
01193 #define TYPE_QUAL_V1BUF 0x40
01194 #define TYPE_QUAL_V2BUF 0x80
01195 #define TYPE_QUAL_V4BUF 0x100
01196 #endif // TARG_SL
01197
01198
01199 #define TYPE_QUALS(NODE) \
01200 ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST) \
01201 | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE) \
01202 | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT) \
01203 | (BOUNDED_INDIRECT_TYPE_P (NODE) * TYPE_QUAL_BOUNDED))
01204
01205 #if defined(TARG_SL)
01206 #define TYPE_VBUF_QUALS(NODE) \
01207 ((TYPE_V1BUF(NODE) * TYPE_QUAL_V1BUF) \
01208 | (TYPE_V2BUF(NODE) * TYPE_QUAL_V2BUF) \
01209 | (TYPE_V4BUF(NODE) * TYPE_QUAL_V4BUF) \
01210 | (TYPE_SBUF(NODE) * TYPE_QUAL_SBUF) \
01211 | (TYPE_SDRAM(NODE) * TYPE_QUAL_SDRAM))
01212 #endif // TARG_SL
01213
01214
01215 #define TREE_EXPR_QUALS(NODE) \
01216 ((TREE_READONLY (NODE) * TYPE_QUAL_CONST) \
01217 | (TREE_THIS_VOLATILE (NODE) * TYPE_QUAL_VOLATILE) \
01218 | (TREE_BOUNDED (NODE) * TYPE_QUAL_BOUNDED))
01219
01220
01221 #define TREE_FUNC_QUALS(NODE) \
01222 ((TREE_READONLY (NODE) * TYPE_QUAL_CONST) \
01223 | (TREE_THIS_VOLATILE (NODE) * TYPE_QUAL_VOLATILE))
01224
01225
01226 #define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type.lang_flag_0)
01227 #define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->type.lang_flag_1)
01228 #define TYPE_LANG_FLAG_2(NODE) (TYPE_CHECK (NODE)->type.lang_flag_2)
01229 #define TYPE_LANG_FLAG_3(NODE) (TYPE_CHECK (NODE)->type.lang_flag_3)
01230 #define TYPE_LANG_FLAG_4(NODE) (TYPE_CHECK (NODE)->type.lang_flag_4)
01231 #define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->type.lang_flag_5)
01232 #define TYPE_LANG_FLAG_6(NODE) (TYPE_CHECK (NODE)->type.lang_flag_6)
01233
01234
01235
01236
01237 #define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag)
01238
01239
01240
01241
01242 #define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) \
01243 TYPE_MAX_VALUE (ARRAY_TYPE_CHECK (ARRAY_TYPE))
01244
01245
01246 #ifndef SGI_MONGOOSE
01247 #define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \
01248 GET_MODE_NUNITS (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.mode)
01249 #else
01250
01251
01252
01253 #define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \
01254 GET_MODE_NUNITS (VECTOR_TYPE->type.mode)
01255 #endif
01256
01257
01258
01259 #define TYPE_NEEDS_CONSTRUCTING(NODE) \
01260 (TYPE_CHECK (NODE)->type.needs_constructing_flag)
01261
01262
01263
01264 #define TYPE_TRANSPARENT_UNION(NODE) \
01265 (UNION_TYPE_CHECK (NODE)->type.transparent_union_flag)
01266
01267
01268
01269 #define TYPE_NONALIASED_COMPONENT(NODE) \
01270 (ARRAY_TYPE_CHECK (NODE)->type.transparent_union_flag)
01271
01272
01273
01274 #define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->type.packed_flag)
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284
01285
01286
01287
01288 #define TYPE_BOUNDED_VALUE(TYPE) TYPE_FIELDS (TYPE)
01289 #define TYPE_BOUNDED_BASE(TYPE) TREE_CHAIN (TYPE_BOUNDED_VALUE (TYPE))
01290 #define TYPE_BOUNDED_EXTENT(TYPE) TREE_CHAIN (TYPE_BOUNDED_BASE (TYPE))
01291
01292
01293 #define TYPE_BOUNDED_SUBTYPE(TYPE) TREE_TYPE (TYPE_BOUNDED_VALUE (TYPE))
01294
01295
01296
01297 #define TYPE_UNBOUNDED_VARIANT(TYPE) \
01298 (BOUNDED_POINTER_TYPE_P (TYPE) ? TYPE_BOUNDED_SUBTYPE (TYPE) : (TYPE))
01299
01300
01301
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313
01314
01315
01316
01317
01318
01319
01320
01321
01322
01323 #define TYPE_POINTER_DEPTH(TYPE) (TYPE_CHECK (TYPE)->type.pointer_depth)
01324
01325 #ifdef KEY
01326
01327 #define TYPE_DEFER_EXPANSION(TYPE) (TYPE_CHECK (TYPE)->type.defer_expansion)
01328 #endif
01329
01330
01331
01332
01333
01334 #define TYPE_AMBIENT_BOUNDEDNESS(TYPE) \
01335 (FUNCTION_TYPE_CHECK (TYPE)->type.transparent_union_flag)
01336
01337 #define MAX_POINTER_DEPTH 2
01338 #define VA_LIST_POINTER_DEPTH 3
01339
01340 struct die_struct;
01341
01342 struct tree_type GTY(())
01343 {
01344 struct tree_common common;
01345 tree values;
01346 tree size;
01347 tree size_unit;
01348 tree attributes;
01349 unsigned int uid;
01350
01351 unsigned int precision : 9;
01352 ENUM_BITFIELD(machine_mode) mode : 7;
01353
01354 unsigned string_flag : 1;
01355 unsigned no_force_blk_flag : 1;
01356 unsigned needs_constructing_flag : 1;
01357 unsigned transparent_union_flag : 1;
01358 unsigned packed_flag : 1;
01359 unsigned restrict_flag : 1;
01360 unsigned pointer_depth : 2;
01361
01362 unsigned lang_flag_0 : 1;
01363 unsigned lang_flag_1 : 1;
01364 unsigned lang_flag_2 : 1;
01365 unsigned lang_flag_3 : 1;
01366 unsigned lang_flag_4 : 1;
01367 unsigned lang_flag_5 : 1;
01368 unsigned lang_flag_6 : 1;
01369 unsigned user_align : 1;
01370
01371 #ifdef KEY
01372 unsigned defer_expansion : 1;
01373 #endif
01374
01375 unsigned int align;
01376 tree pointer_to;
01377 tree reference_to;
01378 union tree_type_symtab {
01379 int address;
01380 char * GTY ((tag ("1"))) pointer;
01381 struct die_struct * GTY ((tag ("2"), skip (""))) die;
01382 } GTY ((desc ("debug_hooks == &sdb_debug_hooks ? 1 : debug_hooks == &dwarf2_debug_hooks ? 2 : 0"),
01383 descbits ("2"))) symtab;
01384 tree name;
01385 tree minval;
01386 tree maxval;
01387 tree next_variant;
01388 tree main_variant;
01389 tree binfo;
01390 tree context;
01391 HOST_WIDE_INT alias_set;
01392
01393 struct lang_type *lang_specific;
01394 #ifdef SGI_MONGOOSE
01395 unsigned int ty_idx;
01396 unsigned int field_ids_used;
01397 struct mongoose_gcc_DST_IDX dst_id;
01398 #endif
01399 };
01400
01401
01402
01403
01404
01405
01406
01407
01408
01409
01410
01411
01412
01413
01414
01415
01416
01417 #define BINFO_TYPE(NODE) TREE_TYPE (NODE)
01418
01419
01420
01421
01422
01423
01424
01425 #define BINFO_OFFSET(NODE) TREE_VEC_ELT ((NODE), 1)
01426 #define TYPE_BINFO_OFFSET(NODE) BINFO_OFFSET (TYPE_BINFO (NODE))
01427 #define BINFO_OFFSET_ZEROP(NODE) (integer_zerop (BINFO_OFFSET (NODE)))
01428
01429
01430
01431
01432
01433 #define BINFO_VTABLE(NODE) TREE_VEC_ELT ((NODE), 2)
01434 #define TYPE_BINFO_VTABLE(NODE) BINFO_VTABLE (TYPE_BINFO (NODE))
01435
01436
01437
01438
01439 #define BINFO_VIRTUALS(NODE) TREE_VEC_ELT ((NODE), 3)
01440 #define TYPE_BINFO_VIRTUALS(NODE) BINFO_VIRTUALS (TYPE_BINFO (NODE))
01441
01442
01443
01444
01445
01446
01447
01448
01449
01450
01451
01452
01453 #define BINFO_BASETYPES(NODE) TREE_VEC_ELT ((NODE), 4)
01454 #define TYPE_BINFO_BASETYPES(NODE) TREE_VEC_ELT (TYPE_BINFO (NODE), 4)
01455
01456
01457 #define BINFO_N_BASETYPES(NODE) \
01458 (BINFO_BASETYPES (NODE) ? TREE_VEC_LENGTH (BINFO_BASETYPES (NODE)) : 0)
01459
01460
01461 #define BINFO_BASETYPE(NODE,N) TREE_VEC_ELT (BINFO_BASETYPES (NODE), (N))
01462 #define TYPE_BINFO_BASETYPE(NODE,N) \
01463 BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (NODE)), (N)))
01464
01465
01466
01467
01468
01469
01470
01471
01472 #define BINFO_VPTR_FIELD(NODE) TREE_VEC_ELT (NODE, 5)
01473
01474
01475
01476 #define BINFO_SIZE(NODE) TREE_VEC_ELT (NODE, 6)
01477 #define BINFO_SIZE_UNIT(NODE) TREE_VEC_ELT (NODE, 7)
01478 #define TYPE_BINFO_SIZE(NODE) BINFO_SIZE (TYPE_BINFO (NODE))
01479 #define TYPE_BINFO_SIZE_UNIT(NODE) BINFO_SIZE_UNIT (TYPE_BINFO (NODE))
01480
01481
01482
01483
01484
01485
01486
01487
01488
01489
01490
01491
01492 #define BINFO_INHERITANCE_CHAIN(NODE) TREE_VEC_ELT ((NODE), 0)
01493
01494
01495
01496
01497 #define DECL_P(DECL) (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd')
01498
01499
01500
01501 #define DECL_NAME(NODE) (DECL_CHECK (NODE)->decl.name)
01502
01503
01504
01505
01506 #define DECL_ASSEMBLER_NAME(NODE) decl_assembler_name (NODE)
01507
01508
01509
01510
01511 #define DECL_ASSEMBLER_NAME_SET_P(NODE) \
01512 (DECL_CHECK (NODE)->decl.assembler_name != NULL_TREE)
01513
01514
01515 #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
01516 (DECL_CHECK (NODE)->decl.assembler_name = (NAME))
01517
01518
01519
01520
01521
01522
01523
01524
01525
01526
01527 #define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2) \
01528 (DECL_ASSEMBLER_NAME_SET_P (DECL1) \
01529 ? (void) SET_DECL_ASSEMBLER_NAME (DECL2, \
01530 DECL_ASSEMBLER_NAME (DECL1)) \
01531 : (void) 0)
01532
01533
01534
01535 #define DECL_SECTION_NAME(NODE) (DECL_CHECK (NODE)->decl.section_name)
01536
01537
01538
01539
01540
01541
01542
01543 #define DECL_CONTEXT(NODE) (DECL_CHECK (NODE)->decl.context)
01544 #define DECL_FIELD_CONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.context)
01545
01546 #define DECL_ATTRIBUTES(NODE) (DECL_CHECK (NODE)->decl.attributes)
01547
01548
01549 #define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.arguments)
01550
01551
01552 #define DECL_FIELD_BIT_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.u2.t)
01553
01554
01555
01556 #define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->decl.result)
01557
01558
01559
01560 #define DECL_ARGUMENTS(NODE) (DECL_CHECK (NODE)->decl.arguments)
01561
01562
01563 #define DECL_RESULT_FLD(NODE) (DECL_CHECK (NODE)->decl.result)
01564
01565 #define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.result)
01566
01567 #define DECL_ORIGINAL_TYPE(NODE) (TYPE_DECL_CHECK (NODE)->decl.result)
01568
01569 #define DECL_ARG_TYPE_AS_WRITTEN(NODE) (PARM_DECL_CHECK (NODE)->decl.result)
01570
01571
01572
01573
01574
01575 #define DECL_INITIAL(NODE) (DECL_CHECK (NODE)->decl.initial)
01576
01577
01578 #define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl.initial)
01579
01580
01581 #define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->decl.initial)
01582
01583
01584
01585
01586 #define DECL_SOURCE_LOCATION(NODE) (DECL_CHECK (NODE)->decl.locus)
01587 #define DECL_SOURCE_FILE(NODE) (DECL_SOURCE_LOCATION (NODE).file)
01588 #define DECL_SOURCE_LINE(NODE) (DECL_SOURCE_LOCATION (NODE).line)
01589
01590
01591 #define DECL_SIZE(NODE) (DECL_CHECK (NODE)->decl.size)
01592
01593 #define DECL_SIZE_UNIT(NODE) (DECL_CHECK (NODE)->decl.size_unit)
01594
01595 #define DECL_ALIGN(NODE) (DECL_CHECK (NODE)->decl.u1.a.align)
01596
01597 #define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
01598
01599
01600
01601
01602 #define DECL_OFFSET_ALIGN(NODE) \
01603 (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align)
01604
01605 #define SET_DECL_OFFSET_ALIGN(NODE, X) \
01606 (FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align = exact_log2 ((X) & -(X)))
01607
01608
01609 #define DECL_USER_ALIGN(NODE) (DECL_CHECK (NODE)->decl.user_align)
01610
01611
01612
01613 #define DECL_MODE(NODE) (DECL_CHECK (NODE)->decl.mode)
01614
01615
01616
01617
01618
01619
01620
01621
01622 #define DECL_RTL(NODE) \
01623 (DECL_CHECK (NODE)->decl.rtl \
01624 ? (NODE)->decl.rtl \
01625 : (make_decl_rtl (NODE, NULL), (NODE)->decl.rtl))
01626
01627 #define SET_DECL_RTL(NODE, RTL) (DECL_CHECK (NODE)->decl.rtl = (RTL))
01628
01629 #define DECL_RTL_SET_P(NODE) (DECL_CHECK (NODE)->decl.rtl != NULL)
01630
01631
01632 #define COPY_DECL_RTL(NODE1, NODE2) \
01633 (DECL_CHECK (NODE2)->decl.rtl = DECL_CHECK (NODE1)->decl.rtl)
01634
01635 #define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)
01636
01637
01638
01639 #define DECL_LIVE_RANGE_RTL(NODE) (DECL_CHECK (NODE)->decl.live_range_rtl)
01640
01641
01642
01643 #define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->decl.u2.r)
01644
01645
01646 #define DECL_SAVED_INSNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u2.f)
01647
01648
01649
01650 #define DECL_FUNCTION_CODE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u1.f)
01651
01652
01653
01654
01655
01656
01657
01658
01659 #define DECL_VINDEX(NODE) (DECL_CHECK (NODE)->decl.vindex)
01660
01661
01662
01663
01664 #define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.vindex)
01665
01666
01667 #define DECL_UID(NODE) (DECL_CHECK (NODE)->decl.uid)
01668
01669
01670
01671
01672
01673
01674 #define DECL_ABSTRACT_ORIGIN(NODE) (DECL_CHECK (NODE)->decl.abstract_origin)
01675
01676
01677
01678 #define DECL_ORIGIN(NODE) \
01679 (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE))
01680
01681
01682
01683
01684
01685 #define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \
01686 && DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
01687
01688
01689
01690 #define DECL_IGNORED_P(NODE) (DECL_CHECK (NODE)->decl.ignored_flag)
01691
01692
01693
01694
01695
01696
01697
01698 #define DECL_ABSTRACT(NODE) (DECL_CHECK (NODE)->decl.abstract_flag)
01699
01700
01701
01702 #define DECL_IN_SYSTEM_HEADER(NODE) \
01703 (DECL_CHECK (NODE)->decl.in_system_header_flag)
01704
01705
01706
01707
01708 #define DECL_COMMON(NODE) (DECL_CHECK (NODE)->decl.common_flag)
01709
01710
01711 #define DECL_LANG_SPECIFIC(NODE) (DECL_CHECK (NODE)->decl.lang_specific)
01712
01713 #ifdef SGI_MONGOOSE
01714
01715 #define DECL_ST(NODE) (DECL_CHECK (NODE)->decl.sgi_u1.st)
01716 #define DECL_ST2(NODE) (DECL_CHECK (NODE)->decl.sgi_u2.st2)
01717
01718 #define DECL_FIELD_ID(NODE) (DECL_CHECK (NODE)->decl.sgi_u1.field_id)
01719 #define DECL_DST_IDX(NODE) (TYPE_CHECK(NODE)->decl.decl_dst_id)
01720 #endif
01721
01722 #if defined(TARG_SL)
01723 #define DECL_SL_MODEL_NAME(NODE) (DECL_CHECK(NODE) -> decl.sl_model_name)
01724 #endif
01725
01726
01727
01728
01729 #define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag)
01730
01731
01732
01733 #define DEFAULT_INIT_PRIORITY 65535
01734 #define MAX_INIT_PRIORITY 65535
01735 #define MAX_RESERVED_INIT_PRIORITY 100
01736
01737
01738
01739
01740
01741 #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
01742 (TYPE_DECL_CHECK (NODE)->decl.external_flag)
01743
01744
01745 #define DECL_REGISTER(NODE) (DECL_CHECK (NODE)->decl.regdecl_flag)
01746
01747
01748
01749 #define DECL_ERROR_ISSUED(NODE) (LABEL_DECL_CHECK (NODE)->decl.regdecl_flag)
01750
01751
01752 #define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl.regdecl_flag)
01753
01754
01755
01756 #define DECL_NO_STATIC_CHAIN(NODE) \
01757 (FUNCTION_DECL_CHECK (NODE)->decl.regdecl_flag)
01758
01759
01760
01761
01762
01763
01764
01765
01766 #define DECL_NONLOCAL(NODE) (DECL_CHECK (NODE)->decl.nonlocal_flag)
01767
01768
01769
01770 #define DECL_INLINE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inline_flag)
01771
01772
01773
01774 #define DID_INLINE_FUNC(NODE) \
01775 (FUNCTION_DECL_CHECK (NODE)->decl.inlined_function_flag)
01776
01777
01778 #define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.uninlinable)
01779
01780 #ifdef KEY
01781
01782 #define DECL_NOINLINE_ATTRIB(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.noinline_attrib)
01783 #define DECL_ALWAYS_INLINE_ATTRIB(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.always_inline_attrib)
01784
01785
01786 #define DECL_PROMOTE_STATIC(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.promote_static)
01787 #endif
01788
01789
01790
01791 #define DECL_THREAD_LOCAL(NODE) (VAR_DECL_CHECK (NODE)->decl.thread_local_flag)
01792
01793
01794
01795
01796 #define DECL_SAVED_TREE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.saved_tree)
01797
01798
01799 #define DECL_INLINED_FNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inlined_fns)
01800
01801
01802
01803
01804 #define DECL_BUILT_IN_NONANSI(NODE) \
01805 (FUNCTION_DECL_CHECK (NODE)->common.unsigned_flag)
01806
01807
01808
01809
01810 #define DECL_IS_MALLOC(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.malloc_flag)
01811
01812
01813
01814 #define DECL_IS_PURE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.pure_flag)
01815
01816
01817
01818 #define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl.bit_field_flag)
01819
01820
01821
01822 #define DECL_TOO_LATE(NODE) (LABEL_DECL_CHECK (NODE)->decl.bit_field_flag)
01823
01824
01825
01826
01827
01828 #define DECL_IN_TEXT_SECTION(NODE) (VAR_DECL_CHECK (NODE)->decl.bit_field_flag)
01829
01830
01831 #define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
01832
01833
01834 #define DECL_BUILT_IN_CLASS(NODE) \
01835 (FUNCTION_DECL_CHECK (NODE)->decl.built_in_class)
01836
01837
01838
01839
01840 #define DECL_VIRTUAL_P(NODE) (DECL_CHECK (NODE)->decl.virtual_flag)
01841
01842
01843
01844 #define DECL_DEFER_OUTPUT(NODE) (DECL_CHECK (NODE)->decl.defer_output)
01845
01846
01847
01848
01849 #define DECL_TRANSPARENT_UNION(NODE) \
01850 (PARM_DECL_CHECK (NODE)->decl.transparent_union)
01851
01852
01853
01854 #define DECL_STATIC_CONSTRUCTOR(NODE) \
01855 (FUNCTION_DECL_CHECK (NODE)->decl.static_ctor_flag)
01856
01857 #define DECL_STATIC_DESTRUCTOR(NODE) \
01858 (FUNCTION_DECL_CHECK (NODE)->decl.static_dtor_flag)
01859
01860
01861 #define DECL_ARTIFICIAL(NODE) (DECL_CHECK (NODE)->decl.artificial_flag)
01862
01863
01864 #define DECL_WEAK(NODE) (DECL_CHECK (NODE)->decl.weak_flag)
01865
01866
01867
01868 #define DECL_ONE_ONLY(NODE) (DECL_CHECK (NODE)->decl.transparent_union)
01869
01870
01871
01872
01873
01874
01875
01876
01877
01878
01879 #define DECL_COMDAT(NODE) (DECL_CHECK (NODE)->decl.comdat_flag)
01880
01881
01882
01883 #define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \
01884 (FUNCTION_DECL_CHECK (NODE)->decl.no_instrument_function_entry_exit)
01885
01886
01887
01888 #define DECL_NO_LIMIT_STACK(NODE) \
01889 (FUNCTION_DECL_CHECK (NODE)->decl.no_limit_stack)
01890
01891
01892 #define DECL_LANG_FLAG_0(NODE) (DECL_CHECK (NODE)->decl.lang_flag_0)
01893 #define DECL_LANG_FLAG_1(NODE) (DECL_CHECK (NODE)->decl.lang_flag_1)
01894 #define DECL_LANG_FLAG_2(NODE) (DECL_CHECK (NODE)->decl.lang_flag_2)
01895 #define DECL_LANG_FLAG_3(NODE) (DECL_CHECK (NODE)->decl.lang_flag_3)
01896 #define DECL_LANG_FLAG_4(NODE) (DECL_CHECK (NODE)->decl.lang_flag_4)
01897 #define DECL_LANG_FLAG_5(NODE) (DECL_CHECK (NODE)->decl.lang_flag_5)
01898 #define DECL_LANG_FLAG_6(NODE) (DECL_CHECK (NODE)->decl.lang_flag_6)
01899 #define DECL_LANG_FLAG_7(NODE) (DECL_CHECK (NODE)->decl.lang_flag_7)
01900
01901
01902
01903 #define DECL_NON_ADDR_CONST_P(NODE) (DECL_CHECK (NODE)->decl.non_addr_const_p)
01904
01905
01906
01907 #define DECL_NONADDRESSABLE_P(NODE) \
01908 (FIELD_DECL_CHECK (NODE)->decl.non_addressable)
01909
01910
01911
01912
01913 #define DECL_POINTER_ALIAS_SET(NODE) \
01914 (DECL_CHECK (NODE)->decl.pointer_alias_set)
01915
01916
01917 #define DECL_POINTER_ALIAS_SET_KNOWN_P(NODE) \
01918 (DECL_POINTER_ALIAS_SET (NODE) != - 1)
01919
01920
01921
01922
01923
01924
01925
01926
01927
01928 #define DECL_POINTER_DEPTH(DECL) (DECL_CHECK (DECL)->decl.pointer_depth)
01929
01930 #ifdef SGI_MONGOOSE
01931
01932 #define DECL_SYSCALL_LINKAGE(NODE) (DECL_CHECK (NODE)->decl.syscall_linkage_flag)
01933
01934
01935 #define DECL_WIDEN_RETVAL(NODE) (DECL_CHECK (NODE)->decl.widen_retval_flag)
01936 #endif
01937
01938 #define DECL_CDECL(NODE) (DECL_CHECK (NODE)->decl.is_cdecl)
01939
01940 #ifdef TARG_NVISA
01941 #define DECL_GLOBAL(NODE) (DECL_CHECK (NODE)->decl.is_global)
01942 #define DECL_SHARED(NODE) (DECL_CHECK (NODE)->decl.is_shared)
01943 #define DECL_LOCAL(NODE) (DECL_CHECK (NODE)->decl.is_local)
01944 #define DECL_CONSTANT(NODE) (DECL_CHECK (NODE)->decl.is_constant)
01945 #define DECL_TEXTURE(NODE) (DECL_CHECK (NODE)->decl.is_texture)
01946 #define DECL_THREAD_LIMIT(NODE) (DECL_CHECK (NODE)->decl.limit.thread_limit)
01947 #define DECL_BLOCK_LIMIT(NODE) (DECL_CHECK (NODE)->decl.limit.block_limit)
01948 #endif
01949
01950
01951 #if defined(TARG_SL)
01952
01953 #define DECL_SBUF(NODE) (DECL_CHECK(NODE)->decl.sbuf_flag)
01954 #define DECL_SDRAM(NODE) (DECL_CHECK(NODE)->decl.sdram_flag)
01955 #define DECL_V1BUF(NODE) (DECL_CHECK(NODE)->decl.v1buf_flag)
01956 #define DECL_V2BUF(NODE) (DECL_CHECK(NODE)->decl.v2buf_flag)
01957 #define DECL_V4BUF(NODE) (DECL_CHECK(NODE)->decl.v4buf_flag)
01958 #define DECL_VBUF(NODE) (DECL_V1BUF(NODE)||DECL_V2BUF(NODE)||DECL_V4BUF(NODE))
01959
01960 #endif // TARG_SL
01961
01962 struct function;
01963
01964 struct tree_decl GTY(())
01965 {
01966 struct tree_common common;
01967 location_t locus;
01968 unsigned int uid;
01969 tree size;
01970 ENUM_BITFIELD(machine_mode) mode : 8;
01971
01972 unsigned external_flag : 1;
01973 unsigned nonlocal_flag : 1;
01974 unsigned regdecl_flag : 1;
01975 unsigned inline_flag : 1;
01976 unsigned bit_field_flag : 1;
01977 unsigned virtual_flag : 1;
01978 unsigned ignored_flag : 1;
01979 unsigned abstract_flag : 1;
01980
01981 #if defined(TARG_SL)
01982
01983 unsigned sbuf_flag : 1;
01984 unsigned sdram_flag : 1;
01985 unsigned v1buf_flag : 1;
01986 unsigned v2buf_flag : 1;
01987 unsigned v4buf_flag : 1;
01988
01989 #endif // TARG_SL
01990
01991 unsigned in_system_header_flag : 1;
01992 unsigned common_flag : 1;
01993 unsigned defer_output : 1;
01994 unsigned transparent_union : 1;
01995 unsigned static_ctor_flag : 1;
01996 unsigned static_dtor_flag : 1;
01997 unsigned artificial_flag : 1;
01998 unsigned weak_flag : 1;
01999
02000 unsigned non_addr_const_p : 1;
02001 unsigned no_instrument_function_entry_exit : 1;
02002 unsigned comdat_flag : 1;
02003 unsigned malloc_flag : 1;
02004 unsigned no_limit_stack : 1;
02005 ENUM_BITFIELD(built_in_class) built_in_class : 2;
02006 unsigned pure_flag : 1;
02007
02008 unsigned pointer_depth : 2;
02009 unsigned non_addressable : 1;
02010 unsigned user_align : 1;
02011 unsigned uninlinable : 1;
02012 unsigned thread_local_flag : 1;
02013 unsigned inlined_function_flag : 1;
02014 #ifdef KEY
02015 unsigned noinline_attrib : 1;
02016 #endif
02017
02018 unsigned lang_flag_0 : 1;
02019 unsigned lang_flag_1 : 1;
02020 unsigned lang_flag_2 : 1;
02021 unsigned lang_flag_3 : 1;
02022 unsigned lang_flag_4 : 1;
02023 unsigned lang_flag_5 : 1;
02024 unsigned lang_flag_6 : 1;
02025 unsigned lang_flag_7 : 1;
02026
02027 #ifdef SGI_MONGOOSE
02028 unsigned syscall_linkage_flag : 1;
02029 unsigned widen_retval_flag : 1;
02030 #endif
02031 unsigned is_cdecl: 1;
02032 #ifdef TARG_NVISA
02033 unsigned is_global : 1;
02034 unsigned is_shared : 1;
02035 unsigned is_local : 1;
02036 unsigned is_constant : 1;
02037 unsigned is_texture : 1;
02038 #endif
02039 #ifdef KEY
02040 unsigned promote_static : 1;
02041 unsigned always_inline_attrib : 1;
02042 #endif // KEY
02043 #ifdef TARG_NVISA
02044
02045
02046 struct tree_decl_u1_limits {
02047 unsigned short thread_limit;
02048 unsigned short block_limit;
02049 } limit;
02050 #endif
02051
02052 union tree_decl_u1 {
02053
02054
02055 enum built_in_function f;
02056
02057
02058 HOST_WIDE_INT i;
02059
02060
02061 struct tree_decl_u1_a {
02062 unsigned int align : 24;
02063 unsigned int off_align : 8;
02064 } a;
02065 } GTY ((skip (""))) u1;
02066
02067 tree size_unit;
02068 tree name;
02069 tree context;
02070 tree arguments;
02071 tree result;
02072 tree initial;
02073 tree abstract_origin;
02074 tree assembler_name;
02075 tree section_name;
02076 tree attributes;
02077 rtx rtl;
02078 rtx live_range_rtl;
02079
02080
02081
02082
02083
02084
02085 union tree_decl_u2 {
02086 struct function * GTY ((tag ("FUNCTION_DECL"))) f;
02087 rtx GTY ((tag ("PARM_DECL"))) r;
02088 tree GTY ((tag ("FIELD_DECL"))) t;
02089 int i;
02090 } GTY ((desc ("TREE_CODE((tree) &(%0))"))) u2;
02091
02092
02093 tree saved_tree;
02094
02095
02096
02097 tree inlined_fns;
02098
02099 tree vindex;
02100 HOST_WIDE_INT pointer_alias_set;
02101
02102 struct lang_decl *lang_specific;
02103 #ifdef SGI_MONGOOSE
02104 unsigned symtab_idx : 8;
02105 unsigned label_defined : 1;
02106
02107 union {
02108 ST *st;
02109 LABEL_IDX label_idx;
02110 unsigned int field_id;
02111 } sgi_u1;
02112 union {
02113 ST *st2;
02114 } sgi_u2;
02115 struct mongoose_gcc_DST_IDX decl_dst_id;
02116 #endif
02117
02118 #if defined(TARG_SL)
02119 tree sl_model_name;
02120 #endif
02121
02122 };
02123
02124 #ifdef KEY
02125 #include "omp_types.h"
02126 struct tree_omp GTY(())
02127 {
02128 struct tree_common common;
02129 enum omp_tree_type choice;
02130 void * omp_clause_list;
02131 };
02132 #endif // KEY
02133
02134
02135 enum tree_node_structure_enum {
02136 TS_COMMON,
02137 TS_INT_CST,
02138 TS_REAL_CST,
02139 TS_VECTOR,
02140 TS_STRING,
02141 TS_COMPLEX,
02142 TS_IDENTIFIER,
02143 TS_DECL,
02144 TS_TYPE,
02145 TS_LIST,
02146 TS_VEC,
02147 TS_EXP,
02148 TS_BLOCK,
02149 #ifdef KEY
02150 TS_OMP,
02151 #endif
02152 LAST_TS_ENUM
02153 };
02154
02155
02156
02157
02158
02159 union tree_node GTY ((ptr_alias (union lang_tree_node),
02160 desc ("tree_node_structure (&%h)")))
02161 {
02162 struct tree_common GTY ((tag ("TS_COMMON"))) common;
02163 struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
02164 struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
02165 struct tree_vector GTY ((tag ("TS_VECTOR"))) vector;
02166 struct tree_string GTY ((tag ("TS_STRING"))) string;
02167 struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex;
02168 struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier;
02169 struct tree_decl GTY ((tag ("TS_DECL"))) decl;
02170 struct tree_type GTY ((tag ("TS_TYPE"))) type;
02171 struct tree_list GTY ((tag ("TS_LIST"))) list;
02172 struct tree_vec GTY ((tag ("TS_VEC"))) vec;
02173 struct tree_exp GTY ((tag ("TS_EXP"))) exp;
02174 struct tree_block GTY ((tag ("TS_BLOCK"))) block;
02175 #ifdef KEY
02176 struct tree_omp GTY ((tag ("TS_OMP"))) omp;
02177 #endif
02178 };
02179
02180 /* Standard named or nameless data types of the C compiler. */
02181
02182 enum tree_index
02183 {
02184 TI_ERROR_MARK,
02185 TI_INTQI_TYPE,
02186 TI_INTHI_TYPE,
02187 TI_INTSI_TYPE,
02188 TI_INTDI_TYPE,
02189 TI_INTTI_TYPE,
02190
02191 TI_UINTQI_TYPE,
02192 TI_UINTHI_TYPE,
02193 TI_UINTSI_TYPE,
02194 TI_UINTDI_TYPE,
02195 TI_UINTTI_TYPE,
02196
02197 TI_INTEGER_ZERO,
02198 TI_INTEGER_ONE,
02199 TI_INTEGER_MINUS_ONE,
02200 TI_NULL_POINTER,
02201
02202 TI_SIZE_ZERO,
02203 TI_SIZE_ONE,
02204
02205 TI_BITSIZE_ZERO,
02206 TI_BITSIZE_ONE,
02207 TI_BITSIZE_UNIT,
02208
02209 TI_COMPLEX_INTEGER_TYPE,
02210 TI_COMPLEX_FLOAT_TYPE,
02211 TI_COMPLEX_DOUBLE_TYPE,
02212 TI_COMPLEX_LONG_DOUBLE_TYPE,
02213
02214 TI_FLOAT_TYPE,
02215 TI_DOUBLE_TYPE,
02216 TI_LONG_DOUBLE_TYPE,
02217
02218 TI_VOID_TYPE,
02219 TI_PTR_TYPE,
02220 TI_CONST_PTR_TYPE,
02221 TI_SIZE_TYPE,
02222 TI_PTRDIFF_TYPE,
02223 TI_VA_LIST_TYPE,
02224
02225 TI_VOID_LIST_NODE,
02226
02227 TI_UV4SF_TYPE,
02228 TI_UV4SI_TYPE,
02229 TI_UV8HI_TYPE,
02230 TI_UV8QI_TYPE,
02231 TI_UV4HI_TYPE,
02232 TI_UV2HI_TYPE,
02233 TI_UV2SI_TYPE,
02234 TI_UV2SF_TYPE,
02235 TI_UV2DI_TYPE,
02236 TI_UV1DI_TYPE,
02237 TI_UV16QI_TYPE,
02238
02239 TI_V4SF_TYPE,
02240 TI_V16SF_TYPE,
02241 TI_V4SI_TYPE,
02242 TI_V8HI_TYPE,
02243 TI_V8QI_TYPE,
02244 TI_V4HI_TYPE,
02245 TI_V2HI_TYPE,
02246 TI_V2SI_TYPE,
02247 TI_V2SF_TYPE,
02248 TI_V2DF_TYPE,
02249 TI_V2DI_TYPE,
02250 TI_V1DI_TYPE,
02251 TI_V16QI_TYPE,
02252
02253 TI_MAIN_IDENTIFIER,
02254
02255 TI_MAX
02256 };
02257
02258 extern GTY(()) tree global_trees[TI_MAX];
02259
02260 #define error_mark_node global_trees[TI_ERROR_MARK]
02261
02262 #define intQI_type_node global_trees[TI_INTQI_TYPE]
02263 #define intHI_type_node global_trees[TI_INTHI_TYPE]
02264 #define intSI_type_node global_trees[TI_INTSI_TYPE]
02265 #define intDI_type_node global_trees[TI_INTDI_TYPE]
02266 #define intTI_type_node global_trees[TI_INTTI_TYPE]
02267
02268 #define unsigned_intQI_type_node global_trees[TI_UINTQI_TYPE]
02269 #define unsigned_intHI_type_node global_trees[TI_UINTHI_TYPE]
02270 #define unsigned_intSI_type_node global_trees[TI_UINTSI_TYPE]
02271 #define unsigned_intDI_type_node global_trees[TI_UINTDI_TYPE]
02272 #define unsigned_intTI_type_node global_trees[TI_UINTTI_TYPE]
02273
02274 #define integer_zero_node global_trees[TI_INTEGER_ZERO]
02275 #define integer_one_node global_trees[TI_INTEGER_ONE]
02276 #define integer_minus_one_node global_trees[TI_INTEGER_MINUS_ONE]
02277 #define size_zero_node global_trees[TI_SIZE_ZERO]
02278 #define size_one_node global_trees[TI_SIZE_ONE]
02279 #define bitsize_zero_node global_trees[TI_BITSIZE_ZERO]
02280 #define bitsize_one_node global_trees[TI_BITSIZE_ONE]
02281 #define bitsize_unit_node global_trees[TI_BITSIZE_UNIT]
02282
02283 #define null_pointer_node global_trees[TI_NULL_POINTER]
02284
02285 #define float_type_node global_trees[TI_FLOAT_TYPE]
02286 #define double_type_node global_trees[TI_DOUBLE_TYPE]
02287 #define long_double_type_node global_trees[TI_LONG_DOUBLE_TYPE]
02288
02289 #define complex_integer_type_node global_trees[TI_COMPLEX_INTEGER_TYPE]
02290 #define complex_float_type_node global_trees[TI_COMPLEX_FLOAT_TYPE]
02291 #define complex_double_type_node global_trees[TI_COMPLEX_DOUBLE_TYPE]
02292 #define complex_long_double_type_node global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]
02293
02294 #define void_type_node global_trees[TI_VOID_TYPE]
02295 /* The C type `void *'. */
02296 #define ptr_type_node global_trees[TI_PTR_TYPE]
02297 /* The C type `const void *'. */
02298 #define const_ptr_type_node global_trees[TI_CONST_PTR_TYPE]
02299 /* The C type `size_t'. */
02300 #define size_type_node global_trees[TI_SIZE_TYPE]
02301 #define ptrdiff_type_node global_trees[TI_PTRDIFF_TYPE]
02302 #define va_list_type_node global_trees[TI_VA_LIST_TYPE]
02303
02304 /* The node that should be placed at the end of a parameter list to
02305 indicate that the function does not take a variable number of
02306 arguments. The TREE_VALUE will be void_type_node and there will be
02307 no TREE_CHAIN. Language-independent code should not assume
02308 anything else about this node. */
02309 #define void_list_node global_trees[TI_VOID_LIST_NODE]
02310
02311 #define main_identifier_node global_trees[TI_MAIN_IDENTIFIER]
02312 #define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
02313
02314 #define unsigned_V16QI_type_node global_trees[TI_UV16QI_TYPE]
02315 #define unsigned_V4SI_type_node global_trees[TI_UV4SI_TYPE]
02316 #define unsigned_V8QI_type_node global_trees[TI_UV8QI_TYPE]
02317 #define unsigned_V8HI_type_node global_trees[TI_UV8HI_TYPE]
02318 #define unsigned_V4HI_type_node global_trees[TI_UV4HI_TYPE]
02319 #define unsigned_V2HI_type_node global_trees[TI_UV2HI_TYPE]
02320 #define unsigned_V2SI_type_node global_trees[TI_UV2SI_TYPE]
02321 #define unsigned_V2DI_type_node global_trees[TI_UV2DI_TYPE]
02322 #define unsigned_V1DI_type_node global_trees[TI_UV1DI_TYPE]
02323
02324 #define V16QI_type_node global_trees[TI_V16QI_TYPE]
02325 #define V4SF_type_node global_trees[TI_V4SF_TYPE]
02326 #define V4SI_type_node global_trees[TI_V4SI_TYPE]
02327 #define V8QI_type_node global_trees[TI_V8QI_TYPE]
02328 #define V8HI_type_node global_trees[TI_V8HI_TYPE]
02329 #define V4HI_type_node global_trees[TI_V4HI_TYPE]
02330 #define V2HI_type_node global_trees[TI_V2HI_TYPE]
02331 #define V2SI_type_node global_trees[TI_V2SI_TYPE]
02332 #define V2SF_type_node global_trees[TI_V2SF_TYPE]
02333 #define V2DI_type_node global_trees[TI_V2DI_TYPE]
02334 #define V2DF_type_node global_trees[TI_V2DF_TYPE]
02335 #define V16SF_type_node global_trees[TI_V16SF_TYPE]
02336 #define V1DI_type_node global_trees[TI_V1DI_TYPE]
02337
02338 /* An enumeration of the standard C integer types. These must be
02339 ordered so that shorter types appear before longer ones, and so
02340 that signed types appear before unsigned ones, for the correct
02341 functioning of interpret_integer() in c-lex.c. */
02342 enum integer_type_kind
02343 {
02344 itk_char,
02345 itk_signed_char,
02346 itk_unsigned_char,
02347 itk_short,
02348 itk_unsigned_short,
02349 itk_int,
02350 itk_unsigned_int,
02351 itk_long,
02352 itk_unsigned_long,
02353 itk_long_long,
02354 itk_unsigned_long_long,
02355 itk_none
02356 };
02357
02358 typedef enum integer_type_kind integer_type_kind;
02359
02360 /* The standard C integer types. Use integer_type_kind to index into
02361 this array. */
02362 extern GTY(()) tree integer_types[itk_none];
02363
02364 #define char_type_node integer_types[itk_char]
02365 #define signed_char_type_node integer_types[itk_signed_char]
02366 #define unsigned_char_type_node integer_types[itk_unsigned_char]
02367 #define short_integer_type_node integer_types[itk_short]
02368 #define short_unsigned_type_node integer_types[itk_unsigned_short]
02369 #define integer_type_node integer_types[itk_int]
02370 #define unsigned_type_node integer_types[itk_unsigned_int]
02371 #define long_integer_type_node integer_types[itk_long]
02372 #define long_unsigned_type_node integer_types[itk_unsigned_long]
02373 #define long_long_integer_type_node integer_types[itk_long_long]
02374 #define long_long_unsigned_type_node integer_types[itk_unsigned_long_long]
02375
02376 /* Set to the default thread-local storage (tls) model to use. */
02377
02378 enum tls_model {
02379 TLS_MODEL_GLOBAL_DYNAMIC = 1,
02380 TLS_MODEL_LOCAL_DYNAMIC,
02381 TLS_MODEL_INITIAL_EXEC,
02382 TLS_MODEL_LOCAL_EXEC
02383 };
02384
02385 extern enum tls_model flag_tls_default;
02386
02387 /* Enumerate visibility settings. */
02388
02389 enum symbol_visibility
02390 {
02391 VISIBILITY_DEFAULT,
02392 VISIBILITY_INTERNAL,
02393 VISIBILITY_HIDDEN,
02394 VISIBILITY_PROTECTED
02395 };
02396
02397 /* A pointer-to-function member type looks like:
02398
02399 struct {
02400 __P __pfn;
02401 ptrdiff_t __delta;
02402 };
02403
02404 If __pfn is NULL, it is a NULL pointer-to-member-function.
02405
02406 (Because the vtable is always the first thing in the object, we
02407 don't need its offset.) If the function is virtual, then PFN is
02408 one plus twice the index into the vtable; otherwise, it is just a
02409 pointer to the function.
02410
02411 Unfortunately, using the lowest bit of PFN doesn't work in
02412 architectures that don't impose alignment requirements on function
02413 addresses, or that use the lowest bit to tell one ISA from another,
02414 for example. For such architectures, we use the lowest bit of
02415 DELTA instead of the lowest bit of the PFN, and DELTA will be
02416 multiplied by 2. */
02417
02418 enum ptrmemfunc_vbit_where_t
02419 {
02420 ptrmemfunc_vbit_in_pfn,
02421 ptrmemfunc_vbit_in_delta
02422 };
02423
02424 #define NULL_TREE (tree) NULL
02425
02426 /* Approximate positive square root of a host double. This is for
02427 statistical reports, not code generation. */
02428 extern double approx_sqrt PARAMS ((double));
02429
02430 extern tree decl_assembler_name PARAMS ((tree));
02431
02432 /* Compute the number of bytes occupied by 'node'. This routine only
02433 looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH. */
02434
02435 extern size_t tree_size PARAMS ((tree));
02436
02437 /* Lowest level primitive for allocating a node.
02438 The TREE_CODE is the only argument. Contents are initialized
02439 to zero except for a few of the common fields. */
02440
02441 extern tree make_node PARAMS ((enum tree_code));
02442
02443 /* Make a copy of a node, with all the same contents. */
02444
02445 extern tree copy_node PARAMS ((tree));
02446
02447 /* Make a copy of a chain of TREE_LIST nodes. */
02448
02449 extern tree copy_list PARAMS ((tree));
02450
02451 /* Make a TREE_VEC. */
02452
02453 extern tree make_tree_vec PARAMS ((int));
02454
02455 /* Return the (unique) IDENTIFIER_NODE node for a given name.
02456 The name is supplied as a char *. */
02457
02458 extern tree get_identifier PARAMS ((const char *));
02459
02460 #if GCC_VERSION >= 3000
02461 #define get_identifier(str) \
02462 (__builtin_constant_p (str) \
02463 ? get_identifier_with_length ((str), (unsigned) strlen (str)) \
02464 : (get_identifier) (str))
02465 #endif
02466
02467 /* Identical to get_identifier, except that the length is assumed
02468 known. */
02469
02470 extern tree get_identifier_with_length PARAMS ((const char *, unsigned int));
02471
02472 /* If an identifier with the name TEXT (a null-terminated string) has
02473 previously been referred to, return that node; otherwise return
02474 NULL_TREE. */
02475
02476 extern tree maybe_get_identifier PARAMS ((const char *));
02477
02478 /* Construct various types of nodes. */
02479
02480 #define build_int_2(LO, HI) \
02481 build_int_2_wide ((unsigned HOST_WIDE_INT) (LO), (HOST_WIDE_INT) (HI))
02482
02483 extern tree build PARAMS ((enum tree_code, tree, ...));
02484 extern tree build_nt PARAMS ((enum tree_code, ...));
02485
02486 extern tree build_int_2_wide PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT));
02487 extern tree build_vector PARAMS ((tree, tree));
02488 extern tree build_real_from_int_cst PARAMS ((tree, tree));
02489 extern tree build_complex PARAMS ((tree, tree, tree));
02490 extern tree build_string PARAMS ((int, const char *));
02491 extern tree build1 PARAMS ((enum tree_code, tree, tree));
02492 extern tree build_tree_list PARAMS ((tree, tree));
02493 extern tree build_decl PARAMS ((enum tree_code, tree, tree));
02494 extern tree build_block PARAMS ((tree, tree, tree, tree, tree));
02495 extern tree build_expr_wfl PARAMS ((tree, const char *, int, int));
02496
02497 /* Construct various nodes representing data types. */
02498
02499 extern tree make_signed_type PARAMS ((int));
02500 extern tree make_unsigned_type PARAMS ((int));
02501 extern void initialize_sizetypes PARAMS ((void));
02502 extern void set_sizetype PARAMS ((tree));
02503 extern void fixup_unsigned_type PARAMS ((tree));
02504 extern tree build_pointer_type PARAMS ((tree));
02505 extern tree build_reference_type PARAMS ((tree));
02506 extern tree build_type_no_quals PARAMS ((tree));
02507 extern tree build_index_type PARAMS ((tree));
02508 extern tree build_index_2_type PARAMS ((tree, tree));
02509 extern tree build_array_type PARAMS ((tree, tree));
02510 extern tree build_function_type PARAMS ((tree, tree));
02511 extern tree build_function_type_list PARAMS ((tree, ...));
02512 extern tree build_method_type PARAMS ((tree, tree));
02513 extern tree build_offset_type PARAMS ((tree, tree));
02514 extern tree build_complex_type PARAMS ((tree));
02515 extern tree array_type_nelts PARAMS ((tree));
02516
02517 extern tree value_member PARAMS ((tree, tree));
02518 extern tree purpose_member PARAMS ((tree, tree));
02519 extern tree binfo_member PARAMS ((tree, tree));
02520 extern unsigned int attribute_hash_list PARAMS ((tree));
02521 extern int attribute_list_equal PARAMS ((tree, tree));
02522 extern int attribute_list_contained PARAMS ((tree, tree));
02523 extern int tree_int_cst_equal PARAMS ((tree, tree));
02524 extern int tree_int_cst_lt PARAMS ((tree, tree));
02525 extern int tree_int_cst_compare PARAMS ((tree, tree));
02526 extern int host_integerp PARAMS ((tree, int));
02527 extern HOST_WIDE_INT tree_low_cst PARAMS ((tree, int));
02528 extern int tree_int_cst_msb PARAMS ((tree));
02529 extern int tree_int_cst_sgn PARAMS ((tree));
02530 extern int tree_expr_nonnegative_p PARAMS ((tree));
02531 extern int rtl_expr_nonnegative_p PARAMS ((rtx));
02532 extern int index_type_equal PARAMS ((tree, tree));
02533 extern tree get_inner_array_type PARAMS ((tree));
02534
02535 /* From expmed.c. Since rtl.h is included after tree.h, we can't
02536 put the prototype here. Rtl.h does declare the prototype if
02537 tree.h had been included. */
02538
02539 extern tree make_tree PARAMS ((tree, rtx));
02540
02541 /* Return a type like TTYPE except that its TYPE_ATTRIBUTES
02542 is ATTRIBUTE.
02543
02544 Such modified types already made are recorded so that duplicates
02545 are not made. */
02546
02547 extern tree build_type_attribute_variant PARAMS ((tree, tree));
02548 extern tree build_decl_attribute_variant PARAMS ((tree, tree));
02549
02550 /* Structure describing an attribute and a function to handle it. */
02551 struct attribute_spec
02552 {
02553 /* The name of the attribute (without any leading or trailing __),
02554 or NULL to mark the end of a table of attributes. */
02555 const char *const name;
02556 /* The minimum length of the list of arguments of the attribute. */
02557 const int min_length;
02558 /* The maximum length of the list of arguments of the attribute
02559 (-1 for no maximum). */
02560 const int max_length;
02561 /* Whether this attribute requires a DECL. If it does, it will be passed
02562 from types of DECLs, function return types and array element types to
02563 the DECLs, function types and array types respectively; but when
02564 applied to a type in any other circumstances, it will be ignored with
02565 a warning. (If greater control is desired for a given attribute,
02566 this should be false, and the flags argument to the handler may be
02567 used to gain greater control in that case.) */
02568 const bool decl_required;
02569 /* Whether this attribute requires a type. If it does, it will be passed
02570 from a DECL to the type of that DECL. */
02571 const bool type_required;
02572 /* Whether this attribute requires a function (or method) type. If it does,
02573 it will be passed from a function pointer type to the target type,
02574 and from a function return type (which is not itself a function
02575 pointer type) to the function type. */
02576 const bool function_type_required;
02577 /* Function to handle this attribute. NODE points to the node to which
02578 the attribute is to be applied. If a DECL, it should be modified in
02579 place; if a TYPE, a copy should be created. NAME is the name of the
02580 attribute (possibly with leading or trailing __). ARGS is the TREE_LIST
02581 of the arguments (which may be NULL). FLAGS gives further information
02582 about the context of the attribute. Afterwards, the attributes will
02583 be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as appropriate,
02584 unless *NO_ADD_ATTRS is set to true (which should be done on error,
02585 as well as in any other cases when the attributes should not be added
02586 to the DECL or TYPE). Depending on FLAGS, any attributes to be
02587 applied to another type or DECL later may be returned;
02588 otherwise the return value should be NULL_TREE. This pointer may be
02589 NULL if no special handling is required beyond the checks implied
02590 by the rest of this structure. */
02591 tree (*const handler) PARAMS ((tree *node, tree name, tree args,
02592 int flags, bool *no_add_attrs));
02593 };
02594
02595 /* Flags that may be passed in the third argument of decl_attributes, and
02596 to handler functions for attributes. */
02597 enum attribute_flags
02598 {
02599 /* The type passed in is the type of a DECL, and any attributes that
02600 should be passed in again to be applied to the DECL rather than the
02601 type should be returned. */
02602 ATTR_FLAG_DECL_NEXT = 1,
02603 /* The type passed in is a function return type, and any attributes that
02604 should be passed in again to be applied to the function type rather
02605 than the return type should be returned. */
02606 ATTR_FLAG_FUNCTION_NEXT = 2,
02607 /* The type passed in is an array element type, and any attributes that
02608 should be passed in again to be applied to the array type rather
02609 than the element type should be returned. */
02610 ATTR_FLAG_ARRAY_NEXT = 4,
02611 /* The type passed in is a structure, union or enumeration type being
02612 created, and should be modified in place. */
02613 ATTR_FLAG_TYPE_IN_PLACE = 8,
02614 /* The attributes are being applied by default to a library function whose
02615 name indicates known behavior, and should be silently ignored if they
02616 are not in fact compatible with the function type. */
02617 ATTR_FLAG_BUILT_IN = 16
02618 };
02619
02620 /* Default versions of target-overridable functions. */
02621
02622 extern tree merge_decl_attributes PARAMS ((tree, tree));
02623 extern tree merge_type_attributes PARAMS ((tree, tree));
02624 struct cpp_reader;
02625 extern void default_register_cpp_builtins PARAMS ((struct cpp_reader *));
02626
02627 /* Split a list of declspecs and attributes into two. */
02628
02629 extern void split_specs_attrs PARAMS ((tree, tree *, tree *));
02630
02631 /* Strip attributes from a list of combined specs and attrs. */
02632
02633 extern tree strip_attrs PARAMS ((tree));
02634
02635 /* Return 1 if an attribute and its arguments are valid for a decl or type. */
02636
02637 extern int valid_machine_attribute PARAMS ((tree, tree, tree, tree));
02638
02639 /* Given a tree node and a string, return nonzero if the tree node is
02640 a valid attribute name for the string. */
02641
02642 extern int is_attribute_p PARAMS ((const char *, tree));
02643
02644 /* Given an attribute name and a list of attributes, return the list element
02645 of the attribute or NULL_TREE if not found. */
02646
02647 extern tree lookup_attribute PARAMS ((const char *, tree));
02648
02649 /* Given two attributes lists, return a list of their union. */
02650
02651 extern tree merge_attributes PARAMS ((tree, tree));
02652
02653 #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES
02654 /* Given two Windows decl attributes lists, possibly including
02655 dllimport, return a list of their union . */
02656 extern tree merge_dllimport_decl_attributes PARAMS ((tree, tree));
02657 #endif
02658
02659 /* Return a version of the TYPE, qualified as indicated by the
02660 TYPE_QUALS, if one exists. If no qualified version exists yet,
02661 return NULL_TREE. */
02662
02663 extern tree get_qualified_type PARAMS ((tree, int));
02664
02665 /* Like get_qualified_type, but creates the type if it does not
02666 exist. This function never returns NULL_TREE. */
02667
02668 extern tree build_qualified_type PARAMS ((tree, int));
02669
02670 /* Like build_qualified_type, but only deals with the `const' and
02671 `volatile' qualifiers. This interface is retained for backwards
02672 compatiblity with the various front-ends; new code should use
02673 build_qualified_type instead. */
02674
02675 #define build_type_variant(TYPE, CONST_P, VOLATILE_P) \
02676 build_qualified_type ((TYPE), \
02677 ((CONST_P) ? TYPE_QUAL_CONST : 0) \
02678 | ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0))
02679
02680 /* Make a copy of a type node. */
02681
02682 extern tree build_type_copy PARAMS ((tree));
02683
02684 /* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT,
02685 TYPE_ALIGN and TYPE_MODE fields. If called more than once on one
02686 node, does nothing except for the first time. */
02687
02688 extern void layout_type PARAMS ((tree));
02689
02690 /* These functions allow a front-end to perform a manual layout of a
02691 RECORD_TYPE. (For instance, if the placement of subsequent fields
02692 depends on the placement of fields so far.) Begin by calling
02693 start_record_layout. Then, call place_field for each of the
02694 fields. Then, call finish_record_layout. See layout_type for the
02695 default way in which these functions are used. */
02696
02697 typedef struct record_layout_info_s
02698 {
02699 /* The RECORD_TYPE that we are laying out. */
02700 tree t;
02701 /* The offset into the record so far, in bytes, not including bits in
02702 BITPOS. */
02703 tree offset;
02704 /* The last known alignment of SIZE. */
02705 unsigned int offset_align;
02706 /* The bit position within the last OFFSET_ALIGN bits, in bits. */
02707 tree bitpos;
02708 /* The alignment of the record so far, in bits. */
02709 unsigned int record_align;
02710 /* The alignment of the record so far, not including padding, in bits. */
02711 unsigned int unpacked_align;
02712 /* The alignment of the record so far, allowing for the record to be
02713 padded only at the end, in bits. */
02714 unsigned int unpadded_align;
02715 /* The previous field layed out. */
02716 tree prev_field;
02717 /* The static variables (i.e., class variables, as opposed to
02718 instance variables) encountered in T. */
02719 tree pending_statics;
02720 /* Bits remaining in the current alignment group */
02721 int remaining_in_alignment;
02722 int packed_maybe_necessary;
02723 } *record_layout_info;
02724
02725 extern void set_lang_adjust_rli PARAMS ((void (*) PARAMS
02726 ((record_layout_info))));
02727 extern record_layout_info start_record_layout PARAMS ((tree));
02728 extern tree bit_from_pos PARAMS ((tree, tree));
02729 extern tree byte_from_pos PARAMS ((tree, tree));
02730 extern void pos_from_byte PARAMS ((tree *, tree *, unsigned int,
02731 tree));
02732 extern void pos_from_bit PARAMS ((tree *, tree *, unsigned int,
02733 tree));
02734 extern void normalize_offset PARAMS ((tree *, tree *,
02735 unsigned int));
02736 extern tree rli_size_unit_so_far PARAMS ((record_layout_info));
02737 extern tree rli_size_so_far PARAMS ((record_layout_info));
02738 extern void normalize_rli PARAMS ((record_layout_info));
02739 extern void place_field PARAMS ((record_layout_info, tree));
02740 extern void compute_record_mode PARAMS ((tree));
02741 extern void finish_record_layout PARAMS ((record_layout_info, int));
02742
02743 /* Given a hashcode and a ..._TYPE node (for which the hashcode was made),
02744 return a canonicalized ..._TYPE node, so that duplicates are not made.
02745 How the hash code is computed is up to the caller, as long as any two
02746 callers that could hash identical-looking type nodes agree. */
02747
02748 extern tree type_hash_canon PARAMS ((unsigned int, tree));
02749
02750 /* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node,
02751 calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE
02752 fields. Call this only once for any given decl node.
02753
02754 Second argument is the boundary that this field can be assumed to
02755 be starting at (in bits). Zero means it can be assumed aligned
02756 on any boundary that may be needed. */
02757
02758 extern void layout_decl PARAMS ((tree, unsigned));
02759
02760 /* Return the mode for data of a given size SIZE and mode class CLASS.
02761 If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
02762 The value is BLKmode if no other mode is found. This is like
02763 mode_for_size, but is passed a tree. */
02764
02765 extern enum machine_mode mode_for_size_tree PARAMS ((tree, enum mode_class,
02766 int));
02767
02768 /* Return an expr equal to X but certainly not valid as an lvalue. */
02769
02770 extern tree non_lvalue PARAMS ((tree));
02771 extern tree pedantic_non_lvalue PARAMS ((tree));
02772
02773 extern tree convert PARAMS ((tree, tree));
02774 #ifdef KEY
02775 extern tree convert_floor_to_floorf PARAMS ((tree));
02776 #endif
02777 extern unsigned int expr_align PARAMS ((tree));
02778 extern tree size_in_bytes PARAMS ((tree));
02779 extern HOST_WIDE_INT int_size_in_bytes PARAMS ((tree));
02780 extern tree bit_position PARAMS ((tree));
02781 extern HOST_WIDE_INT int_bit_position PARAMS ((tree));
02782 extern tree byte_position PARAMS ((tree));
02783 extern HOST_WIDE_INT int_byte_position PARAMS ((tree));
02784
02785 /* Define data structures, macros, and functions for handling sizes
02786 and the various types used to represent sizes. */
02787
02788 enum size_type_kind
02789 {
02790 SIZETYPE, /* Normal representation of sizes in bytes. */
02791 SSIZETYPE, /* Signed representation of sizes in bytes. */
02792 USIZETYPE, /* Unsigned representation of sizes in bytes. */
02793 BITSIZETYPE, /* Normal representation of sizes in bits. */
02794 SBITSIZETYPE, /* Signed representation of sizes in bits. */
02795 UBITSIZETYPE, /* Unsifgned representation of sizes in bits. */
02796 TYPE_KIND_LAST};
02797
02798 extern GTY(()) tree sizetype_tab[(int) TYPE_KIND_LAST];
02799
02800 #define sizetype sizetype_tab[(int) SIZETYPE]
02801 #define bitsizetype sizetype_tab[(int) BITSIZETYPE]
02802 #define ssizetype sizetype_tab[(int) SSIZETYPE]
02803 #define usizetype sizetype_tab[(int) USIZETYPE]
02804 #define sbitsizetype sizetype_tab[(int) SBITSIZETYPE]
02805 #define ubitsizetype sizetype_tab[(int) UBITSIZETYPE]
02806
02807 extern tree size_binop PARAMS ((enum tree_code, tree, tree));
02808 extern tree size_diffop PARAMS ((tree, tree));
02809 extern tree size_int_wide PARAMS ((HOST_WIDE_INT,
02810 enum size_type_kind));
02811 extern tree size_int_type_wide PARAMS ((HOST_WIDE_INT, tree));
02812
02813 #define size_int_type(L, T) size_int_type_wide ((HOST_WIDE_INT) (L), T)
02814 #define size_int(L) size_int_wide ((HOST_WIDE_INT) (L), SIZETYPE)
02815 #define ssize_int(L) size_int_wide ((HOST_WIDE_INT) (L), SSIZETYPE)
02816 #define bitsize_int(L) size_int_wide ((HOST_WIDE_INT) (L), BITSIZETYPE)
02817 #define sbitsize_int(L) size_int_wide ((HOST_WIDE_INT) (L), SBITSIZETYPE)
02818
02819 extern tree round_up PARAMS ((tree, int));
02820 extern tree round_down PARAMS ((tree, int));
02821 extern tree get_pending_sizes PARAMS ((void));
02822 extern int is_pending_size PARAMS ((tree));
02823 extern void put_pending_size PARAMS ((tree));
02824 extern void put_pending_sizes PARAMS ((tree));
02825
02826 /* Type for sizes of data-type. */
02827
02828 #define BITS_PER_UNIT_LOG \
02829 ((BITS_PER_UNIT > 1) + (BITS_PER_UNIT > 2) + (BITS_PER_UNIT > 4) \
02830 + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \
02831 + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256))
02832
02833 /* If nonzero, an upper limit on alignment of structure fields, in bits. */
02834 extern unsigned int maximum_field_alignment;
02835
02836 /* If nonzero, the alignment of a bitstring or (power-)set value, in bits. */
02837 extern unsigned int set_alignment;
02838
02839 /* Concatenate two lists (chains of TREE_LIST nodes) X and Y
02840 by making the last node in X point to Y.
02841 Returns X, except if X is 0 returns Y. */
02842
02843 extern tree chainon PARAMS ((tree, tree));
02844
02845 /* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN. */
02846
02847 extern tree tree_cons PARAMS ((tree, tree, tree));
02848
02849 /* Return the last tree node in a chain. */
02850
02851 extern tree tree_last PARAMS ((tree));
02852
02853 /* Reverse the order of elements in a chain, and return the new head. */
02854
02855 extern tree nreverse PARAMS ((tree));
02856
02857 /* Returns the length of a chain of nodes
02858 (number of chain pointers to follow before reaching a null pointer). */
02859
02860 #if defined(SGI_MONGOOSE) && defined(__cplusplus)
02861 extern "C" int list_length PARAMS ((tree));
02862 #else
02863 extern int list_length PARAMS ((tree));
02864 #endif /* SGI_MONGOOSE */
02865
02866 /* Returns the number of FIELD_DECLs in a type. */
02867
02868 extern int fields_length PARAMS ((tree));
02869
02870 /* Given an initializer INIT, return TRUE if INIT is zero or some
02871 aggregate of zeros. Otherwise return FALSE. */
02872
02873 extern bool initializer_zerop PARAMS ((tree));
02874
02875 /* integer_zerop (tree x) is nonzero if X is an integer constant of value 0 */
02876
02877 extern int integer_zerop PARAMS ((tree));
02878
02879 /* integer_onep (tree x) is nonzero if X is an integer constant of value 1 */
02880
02881 extern int integer_onep PARAMS ((tree));
02882
02883 /* integer_all_onesp (tree x) is nonzero if X is an integer constant
02884 all of whose significant bits are 1. */
02885
02886 extern int integer_all_onesp PARAMS ((tree));
02887
02888 /* integer_pow2p (tree x) is nonzero is X is an integer constant with
02889 exactly one bit 1. */
02890
02891 extern int integer_pow2p PARAMS ((tree));
02892
02893 /* staticp (tree x) is nonzero if X is a reference to data allocated
02894 at a fixed address in memory. */
02895
02896 extern int staticp PARAMS ((tree));
02897
02898 /* Gets an error if argument X is not an lvalue.
02899 Also returns 1 if X is an lvalue, 0 if not. */
02900
02901 extern int lvalue_or_else PARAMS ((tree, const char *));
02902
02903 /* save_expr (EXP) returns an expression equivalent to EXP
02904 but it can be used multiple times within context CTX
02905 and only evaluate EXP once. */
02906
02907 extern tree save_expr PARAMS ((tree));
02908
02909 /* Returns the index of the first non-tree operand for CODE, or the number
02910 of operands if all are trees. */
02911
02912 extern int first_rtl_op PARAMS ((enum tree_code));
02913
02914 /* Return which tree structure is used by T. */
02915
02916 enum tree_node_structure_enum tree_node_structure PARAMS ((tree));
02917
02918 /* unsave_expr (EXP) returns an expression equivalent to EXP but it
02919 can be used multiple times and will evaluate EXP in its entirety
02920 each time. */
02921
02922 extern tree unsave_expr PARAMS ((tree));
02923
02924 /* Reset EXP in place so that it can be expaned again. Does not
02925 recurse into subtrees. */
02926
02927 extern void unsave_expr_1 PARAMS ((tree));
02928
02929 /* Return 0 if it is safe to evaluate EXPR multiple times,
02930 return 1 if it is safe if EXPR is unsaved afterward, or
02931 return 2 if it is completely unsafe. */
02932 extern int unsafe_for_reeval PARAMS ((tree));
02933
02934 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
02935 or offset that depends on a field within a record.
02936
02937 Note that we only allow such expressions within simple arithmetic
02938 or a COND_EXPR. */
02939
02940 extern int contains_placeholder_p PARAMS ((tree));
02941
02942 /* Return 1 if EXP contains any expressions that produce cleanups for an
02943 outer scope to deal with. Used by fold. */
02944
02945 extern int has_cleanups PARAMS ((tree));
02946
02947 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
02948 return a tree with all occurrences of references to F in a
02949 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
02950 contains only arithmetic expressions. */
02951
02952 extern tree substitute_in_expr PARAMS ((tree, tree, tree));
02953
02954 /* variable_size (EXP) is like save_expr (EXP) except that it
02955 is for the special case of something that is part of a
02956 variable size for a data type. It makes special arrangements
02957 to compute the value at the right time when the data type
02958 belongs to a function parameter. */
02959
02960 extern tree variable_size PARAMS ((tree));
02961
02962 /* stabilize_reference (EXP) returns an reference equivalent to EXP
02963 but it can be used multiple times
02964 and only evaluate the subexpressions once. */
02965
02966 extern tree stabilize_reference PARAMS ((tree));
02967
02968 /* Subroutine of stabilize_reference; this is called for subtrees of
02969 references. Any expression with side-effects must be put in a SAVE_EXPR
02970 to ensure that it is only evaluated once. */
02971
02972 extern tree stabilize_reference_1 PARAMS ((tree));
02973
02974 /* Return EXP, stripped of any conversions to wider types
02975 in such a way that the result of converting to type FOR_TYPE
02976 is the same as if EXP were converted to FOR_TYPE.
02977 If FOR_TYPE is 0, it signifies EXP's type. */
02978
02979 extern tree get_unwidened PARAMS ((tree, tree));
02980
02981 /* Return OP or a simpler expression for a narrower value
02982 which can be sign-extended or zero-extended to give back OP.
02983 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
02984 or 0 if the value should be sign-extended. */
02985
02986 extern tree get_narrower PARAMS ((tree, int *));
02987
02988 /* Given an expression EXP that may be a COMPONENT_REF or an ARRAY_REF,
02989 look for nested component-refs or array-refs at constant positions
02990 and find the ultimate containing object, which is returned. */
02991
02992 extern tree get_inner_reference PARAMS ((tree, HOST_WIDE_INT *,
02993 HOST_WIDE_INT *, tree *,
02994 enum machine_mode *, int *,
02995 int *));
02996
02997 /* Return 1 if T is an expression that get_inner_reference handles. */
02998
02999 extern int handled_component_p PARAMS ((tree));
03000
03001 /* Given a DECL or TYPE, return the scope in which it was declared, or
03002 NUL_TREE if there is no containing scope. */
03003
03004 extern tree get_containing_scope PARAMS ((tree));
03005
03006 /* Return the FUNCTION_DECL which provides this _DECL with its context,
03007 or zero if none. */
03008 extern tree decl_function_context PARAMS ((tree));
03009
03010 /* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides
03011 this _DECL with its context, or zero if none. */
03012 extern tree decl_type_context PARAMS ((tree));
03013
03014 /* Given the FUNCTION_DECL for the current function,
03015 return zero if it is ok for this function to be inline.
03016 Otherwise return a warning message with a single %s
03017 for the function's name. */
03018
03019 extern const char *function_cannot_inline_p PARAMS ((tree));
03020
03021 /* Return 1 if EXPR is the real constant zero. */
03022 extern int real_zerop PARAMS ((tree));
03023
03024 /* Declare commonly used variables for tree structure. */
03025
03026 /* Points to the name of the input file from which the current input
03027 being parsed originally came (before it went into cpp). */
03028 extern const char *input_filename;
03029
03030 /* Current line number in input file. */
03031 extern int lineno;
03032
03033 /* Nonzero means lvalues are limited to those valid in pedantic ANSI C.
03034 Zero means allow extended lvalues. */
03035
03036 extern int pedantic_lvalues;
03037
03038 /* Nonzero means can safely call expand_expr now;
03039 otherwise layout_type puts variable sizes onto `pending_sizes' instead. */
03040
03041 extern int immediate_size_expand;
03042
03043 /* Points to the FUNCTION_DECL of the function whose body we are reading. */
03044
03045 extern GTY(()) tree current_function_decl;
03046
03047 /* Nonzero means a FUNC_BEGIN label was emitted. */
03048 extern GTY(()) tree current_function_func_begin_label;
03049
03050 /* Nonzero means all ..._TYPE nodes should be allocated permanently. */
03051
03052 extern int all_types_permanent;
03053
03054 /* Declare a predefined function. Return the declaration. This function is
03055 provided by each language frontend. */
03056 extern tree builtin_function PARAMS ((const char *, tree, int,
03057 enum built_in_class,
03058 const char *, tree));
03059
03060 /* In tree.c */
03061 extern void clean_symbol_name PARAMS ((char *));
03062 extern tree get_file_function_name_long PARAMS ((const char *));
03063 extern tree get_set_constructor_bits PARAMS ((tree, char *, int));
03064 extern tree get_set_constructor_bytes PARAMS ((tree,
03065 unsigned char *, int));
03066 extern tree get_callee_fndecl PARAMS ((tree));
03067 extern void set_decl_assembler_name PARAMS ((tree));
03068 extern int type_num_arguments PARAMS ((tree));
03069 extern tree lhd_unsave_expr_now PARAMS ((tree));
03070
03071
03072 /* In stmt.c */
03073
03074 extern int in_control_zone_p PARAMS ((void));
03075 extern void expand_fixups PARAMS ((rtx));
03076 extern tree expand_start_stmt_expr PARAMS ((int));
03077 extern tree expand_end_stmt_expr PARAMS ((tree));
03078 extern void expand_expr_stmt PARAMS ((tree));
03079 extern void expand_expr_stmt_value PARAMS ((tree, int, int));
03080 extern int warn_if_unused_value PARAMS ((tree));
03081 extern void expand_decl_init PARAMS ((tree));
03082 extern void clear_last_expr PARAMS ((void));
03083 extern void expand_label PARAMS ((tree));
03084 extern void expand_goto PARAMS ((tree));
03085 extern void expand_asm PARAMS ((tree, int));
03086 extern void expand_start_cond PARAMS ((tree, int));
03087 extern void expand_end_cond PARAMS ((void));
03088 extern void expand_start_else PARAMS ((void));
03089 extern void expand_start_elseif PARAMS ((tree));
03090 extern struct nesting *expand_start_loop PARAMS ((int));
03091 extern struct nesting *expand_start_loop_continue_elsewhere PARAMS ((int));
03092 extern struct nesting *expand_start_null_loop PARAMS ((void));
03093 extern void expand_loop_continue_here PARAMS ((void));
03094 extern void expand_end_loop PARAMS ((void));
03095 extern void expand_end_null_loop PARAMS ((void));
03096 extern int expand_continue_loop PARAMS ((struct nesting *));
03097 extern int expand_exit_loop PARAMS ((struct nesting *));
03098 extern int expand_exit_loop_if_false PARAMS ((struct nesting *,
03099 tree));
03100 extern int expand_exit_loop_top_cond PARAMS ((struct nesting *,
03101 tree));
03102 extern int expand_exit_something PARAMS ((void));
03103
03104 extern void expand_return PARAMS ((tree));
03105 extern int optimize_tail_recursion PARAMS ((tree, rtx));
03106 extern void expand_start_bindings_and_block PARAMS ((int, tree));
03107 #define expand_start_bindings(flags) \
03108 expand_start_bindings_and_block(flags, NULL_TREE)
03109 extern void expand_end_bindings PARAMS ((tree, int, int));
03110 extern void warn_about_unused_variables PARAMS ((tree));
03111 extern void start_cleanup_deferral PARAMS ((void));
03112 extern void end_cleanup_deferral PARAMS ((void));
03113 extern int is_body_block PARAMS ((tree));
03114
03115 extern int conditional_context PARAMS ((void));
03116 extern struct nesting * current_nesting_level PARAMS ((void));
03117 extern tree last_cleanup_this_contour PARAMS ((void));
03118 extern void expand_start_case PARAMS ((int, tree, tree,
03119 const char *));
03120 extern void expand_end_case_type PARAMS ((tree, tree));
03121 #define expand_end_case(cond) expand_end_case_type (cond, NULL)
03122 extern int add_case_node PARAMS ((tree, tree,
03123 tree, tree *));
03124 extern int pushcase PARAMS ((tree,
03125 tree (*) (tree, tree),
03126 tree, tree *));
03127 extern int pushcase_range PARAMS ((tree, tree,
03128 tree (*) (tree, tree),
03129 tree, tree *));
03130 extern void using_eh_for_cleanups PARAMS ((void));
03131 extern int stmt_loop_nest_empty PARAMS ((void));
03132
03133 /* In fold-const.c */
03134
03135 /* Fold constants as much as possible in an expression.
03136 Returns the simplified expression.
03137 Acts only on the top level of the expression;
03138 if the argument itself cannot be simplified, its
03139 subexpressions are not changed. */
03140
03141 extern tree fold PARAMS ((tree));
03142
03143 extern int force_fit_type PARAMS ((tree, int));
03144 extern int add_double PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT,
03145 unsigned HOST_WIDE_INT, HOST_WIDE_INT,
03146 unsigned HOST_WIDE_INT *,
03147 HOST_WIDE_INT *));
03148 extern int neg_double PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT,
03149 unsigned HOST_WIDE_INT *,
03150 HOST_WIDE_INT *));
03151 extern int mul_double PARAMS ((unsigned HOST_WIDE_INT,
03152 HOST_WIDE_INT,
03153 unsigned HOST_WIDE_INT, HOST_WIDE_INT,
03154 unsigned HOST_WIDE_INT *,
03155 HOST_WIDE_INT *));
03156 extern void lshift_double PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT,
03157 HOST_WIDE_INT, unsigned int,
03158 unsigned HOST_WIDE_INT *,
03159 HOST_WIDE_INT *, int));
03160 extern void rshift_double PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT,
03161 HOST_WIDE_INT, unsigned int,
03162 unsigned HOST_WIDE_INT *,
03163 HOST_WIDE_INT *, int));
03164 extern void lrotate_double PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT,
03165 HOST_WIDE_INT, unsigned int,
03166 unsigned HOST_WIDE_INT *,
03167 HOST_WIDE_INT *));
03168 extern void rrotate_double PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT,
03169 HOST_WIDE_INT, unsigned int,
03170 unsigned HOST_WIDE_INT *,
03171 HOST_WIDE_INT *));
03172 extern int operand_equal_p PARAMS ((tree, tree, int));
03173 extern tree invert_truthvalue PARAMS ((tree));
03174
03175 extern tree fold_builtin PARAMS ((tree));
03176
03177 extern tree build_range_type PARAMS ((tree, tree, tree));
03178
03179 /* In alias.c */
03180 extern void record_component_aliases PARAMS ((tree));
03181 extern HOST_WIDE_INT get_alias_set PARAMS ((tree));
03182 extern int alias_sets_conflict_p PARAMS ((HOST_WIDE_INT,
03183 HOST_WIDE_INT));
03184 extern int readonly_fields_p PARAMS ((tree));
03185 extern int objects_must_conflict_p PARAMS ((tree, tree));
03186
03187 struct obstack;
03188
03189 /* In tree.c */
03190 extern int really_constant_p PARAMS ((tree));
03191 extern int int_fits_type_p PARAMS ((tree, tree));
03192 extern bool variably_modified_type_p PARAMS ((tree));
03193 extern int tree_log2 PARAMS ((tree));
03194 extern int tree_floor_log2 PARAMS ((tree));
03195 extern int simple_cst_equal PARAMS ((tree, tree));
03196 extern int compare_tree_int PARAMS ((tree,
03197 unsigned HOST_WIDE_INT));
03198 extern int type_list_equal PARAMS ((tree, tree));
03199 extern int chain_member PARAMS ((tree, tree));
03200 extern int chain_member_purpose PARAMS ((tree, tree));
03201 extern int chain_member_value PARAMS ((tree, tree));
03202 extern tree listify PARAMS ((tree));
03203 extern tree type_hash_lookup PARAMS ((unsigned int, tree));
03204 extern void type_hash_add PARAMS ((unsigned int, tree));
03205 extern unsigned int type_hash_list PARAMS ((tree));
03206 extern int simple_cst_list_equal PARAMS ((tree, tree));
03207 extern void dump_tree_statistics PARAMS ((void));
03208 extern void print_obstack_statistics PARAMS ((const char *,
03209 struct obstack *));
03210 #ifdef BUFSIZ
03211 extern void print_obstack_name PARAMS ((char *, FILE *,
03212 const char *));
03213 #endif
03214 extern void expand_function_end PARAMS ((const char *, int, int));
03215 extern void expand_function_start PARAMS ((tree, int));
03216 extern void expand_pending_sizes PARAMS ((tree));
03217
03218 extern int real_onep PARAMS ((tree));
03219 extern int real_twop PARAMS ((tree));
03220 extern int real_minus_onep PARAMS ((tree));
03221 extern void gcc_obstack_init PARAMS ((struct obstack *));
03222 extern void init_ttree PARAMS ((void));
03223 extern void build_common_tree_nodes PARAMS ((int));
03224 extern void build_common_tree_nodes_2 PARAMS ((int));
03225
03226 /* In function.c */
03227 extern void setjmp_protect_args PARAMS ((void));
03228 extern void setjmp_protect PARAMS ((tree));
03229 extern void expand_main_function PARAMS ((void));
03230 extern void init_dummy_function_start PARAMS ((void));
03231 extern void expand_dummy_function_end PARAMS ((void));
03232 extern void init_function_for_compilation PARAMS ((void));
03233 extern void init_function_start PARAMS ((tree, const char *, int));
03234 extern void assign_parms PARAMS ((tree));
03235 extern void put_var_into_stack PARAMS ((tree, int));
03236 extern void flush_addressof PARAMS ((tree));
03237 extern void uninitialized_vars_warning PARAMS ((tree));
03238 extern void setjmp_args_warning PARAMS ((void));
03239 extern void mark_all_temps_used PARAMS ((void));
03240 extern void init_temp_slots PARAMS ((void));
03241 extern void combine_temp_slots PARAMS ((void));
03242 extern void free_temp_slots PARAMS ((void));
03243 extern void pop_temp_slots PARAMS ((void));
03244 extern void push_temp_slots PARAMS ((void));
03245 extern void preserve_temp_slots PARAMS ((rtx));
03246 extern void preserve_rtl_expr_temps PARAMS ((tree));
03247 extern int aggregate_value_p PARAMS ((tree));
03248 extern void free_temps_for_rtl_expr PARAMS ((tree));
03249 extern void instantiate_virtual_regs PARAMS ((tree, rtx));
03250 extern void unshare_all_rtl PARAMS ((tree, rtx));
03251 extern int max_parm_reg_num PARAMS ((void));
03252 extern void push_function_context PARAMS ((void));
03253 extern void pop_function_context PARAMS ((void));
03254 extern void push_function_context_to PARAMS ((tree));
03255 extern void pop_function_context_from PARAMS ((tree));
03256
03257 /* In print-rtl.c */
03258 #ifdef BUFSIZ
03259 extern void print_rtl PARAMS ((FILE *, rtx));
03260 #endif
03261
03262 /* In print-tree.c */
03263 extern void debug_tree PARAMS ((tree));
03264 #ifdef BUFSIZ
03265 #ifdef SGI_MONGOOSE
03266 extern void print_tree PARAMS ((FILE *, tree));
03267 #endif /* SGI_MONGOOSE */
03268 extern void print_node PARAMS ((FILE *, const char *, tree,
03269 int));
03270 extern void print_node_brief PARAMS ((FILE *, const char *, tree,
03271 int));
03272 extern void indent_to PARAMS ((FILE *, int));
03273 #endif
03274
03275 /* In expr.c */
03276 extern int apply_args_register_offset PARAMS ((int));
03277 extern rtx expand_builtin_return_addr
03278 PARAMS ((enum built_in_function, int, rtx));
03279 extern void check_max_integer_computation_mode PARAMS ((tree));
03280
03281 /* In emit-rtl.c */
03282 extern void start_sequence_for_rtl_expr PARAMS ((tree));
03283 extern rtx emit_line_note PARAMS ((const char *, int));
03284
03285 /* In calls.c */
03286
03287 /* Nonzero if this is a call to a `const' function. */
03288 #define ECF_CONST 1
03289 /* Nonzero if this is a call to a `volatile' function. */
03290 #define ECF_NORETURN 2
03291 /* Nonzero if this is a call to malloc or a related function. */
03292 #define ECF_MALLOC 4
03293 /* Nonzero if it is plausible that this is a call to alloca. */
03294 #define ECF_MAY_BE_ALLOCA 8
03295 /* Nonzero if this is a call to a function that won't throw an exception. */
03296 #define ECF_NOTHROW 16
03297 /* Nonzero if this is a call to setjmp or a related function. */
03298 #define ECF_RETURNS_TWICE 32
03299 /* Nonzero if this is a call to `longjmp'. */
03300 #define ECF_LONGJMP 64
03301 /* Nonzero if this is a syscall that makes a new process in the image of
03302 the current one. */
03303 #define ECF_FORK_OR_EXEC 128
03304 #define ECF_SIBCALL 256
03305 /* Nonzero if this is a call to "pure" function (like const function,
03306 but may read memory. */
03307 #define ECF_PURE 512
03308 /* Nonzero if this is a call to a function that returns with the stack
03309 pointer depressed. */
03310 #define ECF_SP_DEPRESSED 1024
03311 /* Nonzero if this call is known to always return. */
03312 #define ECF_ALWAYS_RETURN 2048
03313 /* Create libcall block around the call. */
03314 #define ECF_LIBCALL_BLOCK 4096
03315
03316
03317 extern int setjmp_call_p PARAMS ((tree));
03318 extern bool alloca_call_p PARAMS ((tree));
03319 extern int flags_from_decl_or_type PARAMS ((tree));
03320
03321
03322 /* In attribs.c. */
03323
03324 /* Process the attributes listed in ATTRIBUTES and install them in *NODE,
03325 which is either a DECL (including a TYPE_DECL) or a TYPE. If a DECL,
03326 it should be modified in place; if a TYPE, a copy should be created
03327 unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS. FLAGS gives further
03328 information, in the form of a bitwise OR of flags in enum attribute_flags
03329 from tree.h. Depending on these flags, some attributes may be
03330 returned to be applied at a later stage (for example, to apply
03331 a decl attribute to the declaration rather than to its type). */
03332 extern tree decl_attributes PARAMS ((tree *, tree, int));
03333
03334 /* In integrate.c */
03335 extern void save_for_inline PARAMS ((tree));
03336 extern void set_decl_abstract_flags PARAMS ((tree, int));
03337 extern void output_inline_function PARAMS ((tree));
03338 extern void set_decl_origin_self PARAMS ((tree));
03339
03340 /* In stor-layout.c */
03341 extern void fixup_signed_type PARAMS ((tree));
03342 extern void internal_reference_types PARAMS ((void));
03343
03344 /* varasm.c */
03345 extern void make_decl_rtl PARAMS ((tree, const char *));
03346 extern void make_decl_one_only PARAMS ((tree));
03347 extern int supports_one_only PARAMS ((void));
03348 extern void variable_section PARAMS ((tree, int));
03349 enum tls_model decl_tls_model PARAMS ((tree));
03350 enum symbol_visibility decl_visibility PARAMS ((tree));
03351 extern void resolve_unique_section PARAMS ((tree, int, int));
03352
03353 /* In fold-const.c */
03354 extern int div_and_round_double PARAMS ((enum tree_code, int,
03355 unsigned HOST_WIDE_INT,
03356 HOST_WIDE_INT,
03357 unsigned HOST_WIDE_INT,
03358 HOST_WIDE_INT,
03359 unsigned HOST_WIDE_INT *,
03360 HOST_WIDE_INT *,
03361 unsigned HOST_WIDE_INT *,
03362 HOST_WIDE_INT *));
03363
03364 /* In stmt.c */
03365 extern void emit_nop PARAMS ((void));
03366 extern void expand_computed_goto PARAMS ((tree));
03367 extern bool parse_output_constraint PARAMS ((const char **,
03368 int, int, int,
03369 bool *, bool *, bool *));
03370 extern void expand_asm_operands PARAMS ((tree, tree, tree, tree, int,
03371 const char *, int));
03372 extern int any_pending_cleanups PARAMS ((int));
03373 extern void init_stmt_for_function PARAMS ((void));
03374 extern int drop_through_at_end_p PARAMS ((void));
03375 extern void expand_start_target_temps PARAMS ((void));
03376 extern void expand_end_target_temps PARAMS ((void));
03377 extern void expand_elseif PARAMS ((tree));
03378 extern void save_stack_pointer PARAMS ((void));
03379 extern void expand_decl PARAMS ((tree));
03380 extern int expand_decl_cleanup PARAMS ((tree, tree));
03381 extern int expand_decl_cleanup_eh PARAMS ((tree, tree, int));
03382 extern void expand_anon_union_decl PARAMS ((tree, tree, tree));
03383 extern void move_cleanups_up PARAMS ((void));
03384 extern void expand_start_case_dummy PARAMS ((void));
03385 extern void expand_end_case_dummy PARAMS ((void));
03386 extern tree case_index_expr_type PARAMS ((void));
03387 extern HOST_WIDE_INT all_cases_count PARAMS ((tree, int *));
03388 extern void check_for_full_enumeration_handling PARAMS ((tree));
03389 extern void declare_nonlocal_label PARAMS ((tree));
03390 extern void default_flag_random_seed PARAMS ((void));
03391
03392 /* If KIND=='I', return a suitable global initializer (constructor) name.
03393 If KIND=='D', return a suitable global clean-up (destructor) name. */
03394 extern tree get_file_function_name PARAMS ((int));
03395
03396 /* Interface of the DWARF2 unwind info support. */
03397
03398 /* Generate a new label for the CFI info to refer to. */
03399
03400 extern char *dwarf2out_cfi_label PARAMS ((void));
03401
03402 /* Entry point to update the canonical frame address (CFA). */
03403
03404 extern void dwarf2out_def_cfa PARAMS ((const char *, unsigned, long));
03405
03406 /* Add the CFI for saving a register window. */
03407
03408 extern void dwarf2out_window_save PARAMS ((const char *));
03409
03410 /* Add a CFI to update the running total of the size of arguments pushed
03411 onto the stack. */
03412
03413 extern void dwarf2out_args_size PARAMS ((const char *, long));
03414
03415 /* Entry point for saving a register to the stack. */
03416
03417 extern void dwarf2out_reg_save PARAMS ((const char *, unsigned, long));
03418
03419 /* Entry point for saving the return address in the stack. */
03420
03421 extern void dwarf2out_return_save PARAMS ((const char *, long));
03422
03423 /* Entry point for saving the return address in a register. */
03424
03425 extern void dwarf2out_return_reg PARAMS ((const char *, unsigned));
03426
03427 /* The type of a function that walks over tree structure. */
03428
03429 typedef tree (*walk_tree_fn) PARAMS ((tree *, int *, void *));
03430
03431 /* In tree-dump.c */
03432
03433 /* Different tree dump places. When you add new tree dump places,
03434 extend the DUMP_FILES array in tree-dump.c */
03435 enum tree_dump_index
03436 {
03437 TDI_all, /* dump the whole translation unit */
03438 TDI_class, /* dump class hierarchy */
03439 TDI_original, /* dump each function before optimizing it */
03440 TDI_optimized, /* dump each function after optimizing it */
03441 TDI_inlined, /* dump each function after inlining
03442 within it. */
03443 TDI_end
03444 };
03445
03446 /* Bit masks to control tree dumping. Not all values are applicable to
03447 all tree dumps. Add new ones at the end. When you define new
03448 values, extend the DUMP_OPTIONS array in tree-dump.c */
03449 #define TDF_ADDRESS (1 << 0) /* dump node addresses */
03450 #define TDF_SLIM (1 << 1) /* don't go wild following links */
03451
03452 typedef struct dump_info *dump_info_p;
03453
03454 extern int dump_flag PARAMS ((dump_info_p, int, tree));
03455 extern int dump_enabled_p PARAMS ((enum tree_dump_index));
03456 extern FILE *dump_begin PARAMS ((enum tree_dump_index, int *));
03457 extern void dump_end PARAMS ((enum tree_dump_index, FILE *));
03458 extern void dump_node PARAMS ((tree, int, FILE *));
03459 extern int dump_switch_p PARAMS ((const char *));
03460 extern const char *dump_flag_name PARAMS ((enum tree_dump_index));
03461
03462
03463 /* Redefine abort to report an internal error w/o coredump, and
03464 reporting the location of the error in the source file. This logic
03465 is duplicated in rtl.h and tree.h because every file that needs the
03466 special abort includes one or both. toplev.h gets too few files,
03467 system.h gets too many. */
03468
03469 extern void fancy_abort PARAMS ((const char *, int, const char *))
03470 ATTRIBUTE_NORETURN;
03471 #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
03472
03473 #endif /* GCC_TREE_H */