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