138fd1498Szrj /* Core data structures for the 'tree' type. 238fd1498Szrj Copyright (C) 1989-2018 Free Software Foundation, Inc. 338fd1498Szrj 438fd1498Szrj This file is part of GCC. 538fd1498Szrj 638fd1498Szrj GCC is free software; you can redistribute it and/or modify it under 738fd1498Szrj the terms of the GNU General Public License as published by the Free 838fd1498Szrj Software Foundation; either version 3, or (at your option) any later 938fd1498Szrj version. 1038fd1498Szrj 1138fd1498Szrj GCC is distributed in the hope that it will be useful, but WITHOUT ANY 1238fd1498Szrj WARRANTY; without even the implied warranty of MERCHANTABILITY or 1338fd1498Szrj FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1438fd1498Szrj for more details. 1538fd1498Szrj 1638fd1498Szrj You should have received a copy of the GNU General Public License 1738fd1498Szrj along with GCC; see the file COPYING3. If not see 1838fd1498Szrj <http://www.gnu.org/licenses/>. */ 1938fd1498Szrj 2038fd1498Szrj #ifndef GCC_TREE_CORE_H 2138fd1498Szrj #define GCC_TREE_CORE_H 2238fd1498Szrj 2338fd1498Szrj #include "symtab.h" 2438fd1498Szrj 2538fd1498Szrj /* This file contains all the data structures that define the 'tree' type. 2638fd1498Szrj There are no accessor macros nor functions in this file. Only the 2738fd1498Szrj basic data structures, extern declarations and type definitions. */ 2838fd1498Szrj 2938fd1498Szrj /*--------------------------------------------------------------------------- 3038fd1498Szrj Forward type declarations. Mostly to avoid including unnecessary headers 3138fd1498Szrj ---------------------------------------------------------------------------*/ 3238fd1498Szrj struct function; 3338fd1498Szrj struct real_value; 3438fd1498Szrj struct fixed_value; 3538fd1498Szrj struct ptr_info_def; 3638fd1498Szrj struct range_info_def; 3738fd1498Szrj struct die_struct; 3838fd1498Szrj 3938fd1498Szrj 4038fd1498Szrj /*--------------------------------------------------------------------------- 4138fd1498Szrj #defined constants 4238fd1498Szrj ---------------------------------------------------------------------------*/ 4338fd1498Szrj /* Nonzero if this is a call to a function whose return value depends 4438fd1498Szrj solely on its arguments, has no side effects, and does not read 4538fd1498Szrj global memory. This corresponds to TREE_READONLY for function 4638fd1498Szrj decls. */ 4738fd1498Szrj #define ECF_CONST (1 << 0) 4838fd1498Szrj 4938fd1498Szrj /* Nonzero if this is a call to "pure" function (like const function, 5038fd1498Szrj but may read memory. This corresponds to DECL_PURE_P for function 5138fd1498Szrj decls. */ 5238fd1498Szrj #define ECF_PURE (1 << 1) 5338fd1498Szrj 5438fd1498Szrj /* Nonzero if this is ECF_CONST or ECF_PURE but cannot be proven to no 5538fd1498Szrj infinite loop. This corresponds to DECL_LOOPING_CONST_OR_PURE_P 5638fd1498Szrj for function decls.*/ 5738fd1498Szrj #define ECF_LOOPING_CONST_OR_PURE (1 << 2) 5838fd1498Szrj 5938fd1498Szrj /* Nonzero if this call will never return. */ 6038fd1498Szrj #define ECF_NORETURN (1 << 3) 6138fd1498Szrj 6238fd1498Szrj /* Nonzero if this is a call to malloc or a related function. */ 6338fd1498Szrj #define ECF_MALLOC (1 << 4) 6438fd1498Szrj 6538fd1498Szrj /* Nonzero if it is plausible that this is a call to alloca. */ 6638fd1498Szrj #define ECF_MAY_BE_ALLOCA (1 << 5) 6738fd1498Szrj 6838fd1498Szrj /* Nonzero if this is a call to a function that won't throw an exception. */ 6938fd1498Szrj #define ECF_NOTHROW (1 << 6) 7038fd1498Szrj 7138fd1498Szrj /* Nonzero if this is a call to setjmp or a related function. */ 7238fd1498Szrj #define ECF_RETURNS_TWICE (1 << 7) 7338fd1498Szrj 7438fd1498Szrj /* Nonzero if this call replaces the current stack frame. */ 7538fd1498Szrj #define ECF_SIBCALL (1 << 8) 7638fd1498Szrj 7738fd1498Szrj /* Function does not read or write memory (but may have side effects, so 7838fd1498Szrj it does not necessarily fit ECF_CONST). */ 7938fd1498Szrj #define ECF_NOVOPS (1 << 9) 8038fd1498Szrj 8138fd1498Szrj /* The function does not lead to calls within current function unit. */ 8238fd1498Szrj #define ECF_LEAF (1 << 10) 8338fd1498Szrj 8438fd1498Szrj /* Nonzero if this call returns its first argument. */ 8538fd1498Szrj #define ECF_RET1 (1 << 11) 8638fd1498Szrj 8738fd1498Szrj /* Nonzero if this call does not affect transactions. */ 8838fd1498Szrj #define ECF_TM_PURE (1 << 12) 8938fd1498Szrj 9038fd1498Szrj /* Nonzero if this call is into the transaction runtime library. */ 9138fd1498Szrj #define ECF_TM_BUILTIN (1 << 13) 9238fd1498Szrj 9338fd1498Szrj /* Nonzero if this is an indirect call by descriptor. */ 9438fd1498Szrj #define ECF_BY_DESCRIPTOR (1 << 14) 9538fd1498Szrj 9638fd1498Szrj /* Nonzero if this is a cold function. */ 9738fd1498Szrj #define ECF_COLD (1 << 15) 9838fd1498Szrj 9938fd1498Szrj /* Call argument flags. */ 10038fd1498Szrj /* Nonzero if the argument is not dereferenced recursively, thus only 10138fd1498Szrj directly reachable memory is read or written. */ 10238fd1498Szrj #define EAF_DIRECT (1 << 0) 10338fd1498Szrj 10438fd1498Szrj /* Nonzero if memory reached by the argument is not clobbered. */ 10538fd1498Szrj #define EAF_NOCLOBBER (1 << 1) 10638fd1498Szrj 10738fd1498Szrj /* Nonzero if the argument does not escape. */ 10838fd1498Szrj #define EAF_NOESCAPE (1 << 2) 10938fd1498Szrj 11038fd1498Szrj /* Nonzero if the argument is not used by the function. */ 11138fd1498Szrj #define EAF_UNUSED (1 << 3) 11238fd1498Szrj 11338fd1498Szrj /* Call return flags. */ 11438fd1498Szrj /* Mask for the argument number that is returned. Lower two bits of 11538fd1498Szrj the return flags, encodes argument slots zero to three. */ 11638fd1498Szrj #define ERF_RETURN_ARG_MASK (3) 11738fd1498Szrj 11838fd1498Szrj /* Nonzero if the return value is equal to the argument number 11938fd1498Szrj flags & ERF_RETURN_ARG_MASK. */ 12038fd1498Szrj #define ERF_RETURNS_ARG (1 << 2) 12138fd1498Szrj 12238fd1498Szrj /* Nonzero if the return value does not alias with anything. Functions 12338fd1498Szrj with the malloc attribute have this set on their return value. */ 12438fd1498Szrj #define ERF_NOALIAS (1 << 3) 12538fd1498Szrj 12638fd1498Szrj 12738fd1498Szrj /*--------------------------------------------------------------------------- 12838fd1498Szrj Enumerations 12938fd1498Szrj ---------------------------------------------------------------------------*/ 13038fd1498Szrj /* Codes of tree nodes. */ 13138fd1498Szrj #define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM, 13238fd1498Szrj #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE, 13338fd1498Szrj 13438fd1498Szrj enum tree_code { 13538fd1498Szrj #include "all-tree.def" 13638fd1498Szrj MAX_TREE_CODES 13738fd1498Szrj }; 13838fd1498Szrj 13938fd1498Szrj #undef DEFTREECODE 14038fd1498Szrj #undef END_OF_BASE_TREE_CODES 14138fd1498Szrj 14238fd1498Szrj /* Number of language-independent tree codes. */ 14338fd1498Szrj #define NUM_TREE_CODES \ 14438fd1498Szrj ((int) LAST_AND_UNUSED_TREE_CODE) 14538fd1498Szrj 14638fd1498Szrj #define CODE_CONTAINS_STRUCT(CODE, STRUCT) \ 14738fd1498Szrj (tree_contains_struct[(CODE)][(STRUCT)]) 14838fd1498Szrj 14938fd1498Szrj 15038fd1498Szrj /* Classify which part of the compiler has defined a given builtin function. 15138fd1498Szrj Note that we assume below that this is no more than two bits. */ 15238fd1498Szrj enum built_in_class { 15338fd1498Szrj NOT_BUILT_IN = 0, 15438fd1498Szrj BUILT_IN_FRONTEND, 15538fd1498Szrj BUILT_IN_MD, 15638fd1498Szrj BUILT_IN_NORMAL 15738fd1498Szrj }; 15838fd1498Szrj 15938fd1498Szrj /* Last marker used for LTO stremaing of built_in_class. We can not add it 16038fd1498Szrj to the enum since we need the enumb to fit in 2 bits. */ 16138fd1498Szrj #define BUILT_IN_LAST (BUILT_IN_NORMAL + 1) 16238fd1498Szrj 16338fd1498Szrj /* Codes that identify the various built in functions 16438fd1498Szrj so that expand_call can identify them quickly. */ 16538fd1498Szrj #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) ENUM, 16638fd1498Szrj enum built_in_function { 16738fd1498Szrj #include "builtins.def" 16838fd1498Szrj 16938fd1498Szrj BEGIN_CHKP_BUILTINS, 17038fd1498Szrj 17138fd1498Szrj #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) 17238fd1498Szrj #define DEF_BUILTIN_CHKP(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) \ 17338fd1498Szrj ENUM##_CHKP = ENUM + BEGIN_CHKP_BUILTINS + 1, 17438fd1498Szrj #include "builtins.def" 17538fd1498Szrj 17638fd1498Szrj END_CHKP_BUILTINS = BEGIN_CHKP_BUILTINS * 2 + 1, 17738fd1498Szrj 17838fd1498Szrj /* Complex division routines in libgcc. These are done via builtins 17938fd1498Szrj because emit_library_call_value can't handle complex values. */ 18038fd1498Szrj BUILT_IN_COMPLEX_MUL_MIN, 18138fd1498Szrj BUILT_IN_COMPLEX_MUL_MAX 18238fd1498Szrj = BUILT_IN_COMPLEX_MUL_MIN 18338fd1498Szrj + MAX_MODE_COMPLEX_FLOAT 18438fd1498Szrj - MIN_MODE_COMPLEX_FLOAT, 18538fd1498Szrj 18638fd1498Szrj BUILT_IN_COMPLEX_DIV_MIN, 18738fd1498Szrj BUILT_IN_COMPLEX_DIV_MAX 18838fd1498Szrj = BUILT_IN_COMPLEX_DIV_MIN 18938fd1498Szrj + MAX_MODE_COMPLEX_FLOAT 19038fd1498Szrj - MIN_MODE_COMPLEX_FLOAT, 19138fd1498Szrj 19238fd1498Szrj /* Upper bound on non-language-specific builtins. */ 19338fd1498Szrj END_BUILTINS 19438fd1498Szrj }; 19538fd1498Szrj 19638fd1498Szrj /* Internal functions. */ 19738fd1498Szrj enum internal_fn { 19838fd1498Szrj #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) IFN_##CODE, 19938fd1498Szrj #include "internal-fn.def" 20038fd1498Szrj IFN_LAST 20138fd1498Szrj }; 20238fd1498Szrj 20338fd1498Szrj /* An enum that combines target-independent built-in functions with 20438fd1498Szrj internal functions, so that they can be treated in a similar way. 20538fd1498Szrj The numbers for built-in functions are the same as for the 20638fd1498Szrj built_in_function enum. The numbers for internal functions 20738fd1498Szrj start at END_BUITLINS. */ 20838fd1498Szrj enum combined_fn { 20938fd1498Szrj #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) \ 21038fd1498Szrj CFN_##ENUM = int (ENUM), 21138fd1498Szrj #include "builtins.def" 21238fd1498Szrj 21338fd1498Szrj #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) 21438fd1498Szrj #define DEF_BUILTIN_CHKP(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) \ 21538fd1498Szrj CFN_##ENUM##_CHKP = int (ENUM##_CHKP), 21638fd1498Szrj #include "builtins.def" 21738fd1498Szrj 21838fd1498Szrj #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) \ 21938fd1498Szrj CFN_##CODE = int (END_BUILTINS) + int (IFN_##CODE), 22038fd1498Szrj #include "internal-fn.def" 22138fd1498Szrj 22238fd1498Szrj CFN_LAST 22338fd1498Szrj }; 22438fd1498Szrj 22538fd1498Szrj /* Tree code classes. Each tree_code has an associated code class 22638fd1498Szrj represented by a TREE_CODE_CLASS. */ 22738fd1498Szrj enum tree_code_class { 22838fd1498Szrj tcc_exceptional, /* An exceptional code (fits no category). */ 22938fd1498Szrj tcc_constant, /* A constant. */ 23038fd1498Szrj /* Order of tcc_type and tcc_declaration is important. */ 23138fd1498Szrj tcc_type, /* A type object code. */ 23238fd1498Szrj tcc_declaration, /* A declaration (also serving as variable refs). */ 23338fd1498Szrj tcc_reference, /* A reference to storage. */ 23438fd1498Szrj tcc_comparison, /* A comparison expression. */ 23538fd1498Szrj tcc_unary, /* A unary arithmetic expression. */ 23638fd1498Szrj tcc_binary, /* A binary arithmetic expression. */ 23738fd1498Szrj tcc_statement, /* A statement expression, which have side effects 23838fd1498Szrj but usually no interesting value. */ 23938fd1498Szrj tcc_vl_exp, /* A function call or other expression with a 24038fd1498Szrj variable-length operand vector. */ 24138fd1498Szrj tcc_expression /* Any other expression. */ 24238fd1498Szrj }; 24338fd1498Szrj 24438fd1498Szrj /* OMP_CLAUSE codes. Do not reorder, as this is used to index into 24538fd1498Szrj the tables omp_clause_num_ops and omp_clause_code_name. */ 24638fd1498Szrj enum omp_clause_code { 24738fd1498Szrj /* Clause zero is special-cased inside the parser 24838fd1498Szrj (c_parser_omp_variable_list). */ 24938fd1498Szrj OMP_CLAUSE_ERROR = 0, 25038fd1498Szrj 25138fd1498Szrj /* OpenACC/OpenMP clause: private (variable_list). */ 25238fd1498Szrj OMP_CLAUSE_PRIVATE, 25338fd1498Szrj 25438fd1498Szrj /* OpenMP clause: shared (variable_list). */ 25538fd1498Szrj OMP_CLAUSE_SHARED, 25638fd1498Szrj 25738fd1498Szrj /* OpenACC/OpenMP clause: firstprivate (variable_list). */ 25838fd1498Szrj OMP_CLAUSE_FIRSTPRIVATE, 25938fd1498Szrj 26038fd1498Szrj /* OpenMP clause: lastprivate (variable_list). */ 26138fd1498Szrj OMP_CLAUSE_LASTPRIVATE, 26238fd1498Szrj 26338fd1498Szrj /* OpenACC/OpenMP clause: reduction (operator:variable_list). 26438fd1498Szrj OMP_CLAUSE_REDUCTION_CODE: The tree_code of the operator. 26538fd1498Szrj Operand 1: OMP_CLAUSE_REDUCTION_INIT: Stmt-list to initialize the var. 26638fd1498Szrj Operand 2: OMP_CLAUSE_REDUCTION_MERGE: Stmt-list to merge private var 26738fd1498Szrj into the shared one. 26838fd1498Szrj Operand 3: OMP_CLAUSE_REDUCTION_PLACEHOLDER: A dummy VAR_DECL 26938fd1498Szrj placeholder used in OMP_CLAUSE_REDUCTION_{INIT,MERGE}. 27038fd1498Szrj Operand 4: OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER: Another dummy 27138fd1498Szrj VAR_DECL placeholder, used like the above for C/C++ array 27238fd1498Szrj reductions. */ 27338fd1498Szrj OMP_CLAUSE_REDUCTION, 27438fd1498Szrj 27538fd1498Szrj /* OpenMP clause: copyin (variable_list). */ 27638fd1498Szrj OMP_CLAUSE_COPYIN, 27738fd1498Szrj 27838fd1498Szrj /* OpenMP clause: copyprivate (variable_list). */ 27938fd1498Szrj OMP_CLAUSE_COPYPRIVATE, 28038fd1498Szrj 28138fd1498Szrj /* OpenMP clause: linear (variable-list[:linear-step]). */ 28238fd1498Szrj OMP_CLAUSE_LINEAR, 28338fd1498Szrj 28438fd1498Szrj /* OpenMP clause: aligned (variable-list[:alignment]). */ 28538fd1498Szrj OMP_CLAUSE_ALIGNED, 28638fd1498Szrj 28738fd1498Szrj /* OpenMP clause: depend ({in,out,inout}:variable-list). */ 28838fd1498Szrj OMP_CLAUSE_DEPEND, 28938fd1498Szrj 29038fd1498Szrj /* OpenMP clause: uniform (argument-list). */ 29138fd1498Szrj OMP_CLAUSE_UNIFORM, 29238fd1498Szrj 29338fd1498Szrj /* OpenMP clause: to (extended-list). 29438fd1498Szrj Only when it appears in declare target. */ 29538fd1498Szrj OMP_CLAUSE_TO_DECLARE, 29638fd1498Szrj 29738fd1498Szrj /* OpenMP clause: link (variable-list). */ 29838fd1498Szrj OMP_CLAUSE_LINK, 29938fd1498Szrj 30038fd1498Szrj /* OpenMP clause: from (variable-list). */ 30138fd1498Szrj OMP_CLAUSE_FROM, 30238fd1498Szrj 30338fd1498Szrj /* OpenMP clause: to (variable-list). */ 30438fd1498Szrj OMP_CLAUSE_TO, 30538fd1498Szrj 30638fd1498Szrj /* OpenACC clauses: {copy, copyin, copyout, create, delete, deviceptr, 30738fd1498Szrj device, host (self), present, present_or_copy (pcopy), present_or_copyin 30838fd1498Szrj (pcopyin), present_or_copyout (pcopyout), present_or_create (pcreate)} 30938fd1498Szrj (variable-list). 31038fd1498Szrj 31138fd1498Szrj OpenMP clause: map ({alloc:,to:,from:,tofrom:,}variable-list). */ 31238fd1498Szrj OMP_CLAUSE_MAP, 31338fd1498Szrj 31438fd1498Szrj /* OpenACC clause: use_device (variable_list). 31538fd1498Szrj OpenMP clause: use_device_ptr (variable-list). */ 31638fd1498Szrj OMP_CLAUSE_USE_DEVICE_PTR, 31738fd1498Szrj 31838fd1498Szrj /* OpenMP clause: is_device_ptr (variable-list). */ 31938fd1498Szrj OMP_CLAUSE_IS_DEVICE_PTR, 32038fd1498Szrj 32138fd1498Szrj /* Internal structure to hold OpenACC cache directive's variable-list. 32238fd1498Szrj #pragma acc cache (variable-list). */ 32338fd1498Szrj OMP_CLAUSE__CACHE_, 32438fd1498Szrj 32538fd1498Szrj /* OpenACC clause: gang [(gang-argument-list)]. 32638fd1498Szrj Where 32738fd1498Szrj gang-argument-list: [gang-argument-list, ] gang-argument 32838fd1498Szrj gang-argument: [num:] integer-expression 32938fd1498Szrj | static: size-expression 33038fd1498Szrj size-expression: * | integer-expression. */ 33138fd1498Szrj OMP_CLAUSE_GANG, 33238fd1498Szrj 33338fd1498Szrj /* OpenACC clause: async [(integer-expression)]. */ 33438fd1498Szrj OMP_CLAUSE_ASYNC, 33538fd1498Szrj 33638fd1498Szrj /* OpenACC clause: wait [(integer-expression-list)]. */ 33738fd1498Szrj OMP_CLAUSE_WAIT, 33838fd1498Szrj 33938fd1498Szrj /* OpenACC clause: auto. */ 34038fd1498Szrj OMP_CLAUSE_AUTO, 34138fd1498Szrj 34238fd1498Szrj /* OpenACC clause: seq. */ 34338fd1498Szrj OMP_CLAUSE_SEQ, 34438fd1498Szrj 34538fd1498Szrj /* Internal clause: temporary for combined loops expansion. */ 34638fd1498Szrj OMP_CLAUSE__LOOPTEMP_, 34738fd1498Szrj 34838fd1498Szrj /* OpenACC/OpenMP clause: if (scalar-expression). */ 34938fd1498Szrj OMP_CLAUSE_IF, 35038fd1498Szrj 35138fd1498Szrj /* OpenMP clause: num_threads (integer-expression). */ 35238fd1498Szrj OMP_CLAUSE_NUM_THREADS, 35338fd1498Szrj 35438fd1498Szrj /* OpenMP clause: schedule. */ 35538fd1498Szrj OMP_CLAUSE_SCHEDULE, 35638fd1498Szrj 35738fd1498Szrj /* OpenMP clause: nowait. */ 35838fd1498Szrj OMP_CLAUSE_NOWAIT, 35938fd1498Szrj 36038fd1498Szrj /* OpenMP clause: ordered [(constant-integer-expression)]. */ 36138fd1498Szrj OMP_CLAUSE_ORDERED, 36238fd1498Szrj 36338fd1498Szrj /* OpenACC/OpenMP clause: default. */ 36438fd1498Szrj OMP_CLAUSE_DEFAULT, 36538fd1498Szrj 36638fd1498Szrj /* OpenACC/OpenMP clause: collapse (constant-integer-expression). */ 36738fd1498Szrj OMP_CLAUSE_COLLAPSE, 36838fd1498Szrj 36938fd1498Szrj /* OpenMP clause: untied. */ 37038fd1498Szrj OMP_CLAUSE_UNTIED, 37138fd1498Szrj 37238fd1498Szrj /* OpenMP clause: final (scalar-expression). */ 37338fd1498Szrj OMP_CLAUSE_FINAL, 37438fd1498Szrj 37538fd1498Szrj /* OpenMP clause: mergeable. */ 37638fd1498Szrj OMP_CLAUSE_MERGEABLE, 37738fd1498Szrj 37838fd1498Szrj /* OpenMP clause: device (integer-expression). */ 37938fd1498Szrj OMP_CLAUSE_DEVICE, 38038fd1498Szrj 38138fd1498Szrj /* OpenMP clause: dist_schedule (static[:chunk-size]). */ 38238fd1498Szrj OMP_CLAUSE_DIST_SCHEDULE, 38338fd1498Szrj 38438fd1498Szrj /* OpenMP clause: inbranch. */ 38538fd1498Szrj OMP_CLAUSE_INBRANCH, 38638fd1498Szrj 38738fd1498Szrj /* OpenMP clause: notinbranch. */ 38838fd1498Szrj OMP_CLAUSE_NOTINBRANCH, 38938fd1498Szrj 39038fd1498Szrj /* OpenMP clause: num_teams(integer-expression). */ 39138fd1498Szrj OMP_CLAUSE_NUM_TEAMS, 39238fd1498Szrj 39338fd1498Szrj /* OpenMP clause: thread_limit(integer-expression). */ 39438fd1498Szrj OMP_CLAUSE_THREAD_LIMIT, 39538fd1498Szrj 39638fd1498Szrj /* OpenMP clause: proc_bind ({master,close,spread}). */ 39738fd1498Szrj OMP_CLAUSE_PROC_BIND, 39838fd1498Szrj 39938fd1498Szrj /* OpenMP clause: safelen (constant-integer-expression). */ 40038fd1498Szrj OMP_CLAUSE_SAFELEN, 40138fd1498Szrj 40238fd1498Szrj /* OpenMP clause: simdlen (constant-integer-expression). */ 40338fd1498Szrj OMP_CLAUSE_SIMDLEN, 40438fd1498Szrj 40538fd1498Szrj /* OpenMP clause: for. */ 40638fd1498Szrj OMP_CLAUSE_FOR, 40738fd1498Szrj 40838fd1498Szrj /* OpenMP clause: parallel. */ 40938fd1498Szrj OMP_CLAUSE_PARALLEL, 41038fd1498Szrj 41138fd1498Szrj /* OpenMP clause: sections. */ 41238fd1498Szrj OMP_CLAUSE_SECTIONS, 41338fd1498Szrj 41438fd1498Szrj /* OpenMP clause: taskgroup. */ 41538fd1498Szrj OMP_CLAUSE_TASKGROUP, 41638fd1498Szrj 41738fd1498Szrj /* OpenMP clause: priority (integer-expression). */ 41838fd1498Szrj OMP_CLAUSE_PRIORITY, 41938fd1498Szrj 42038fd1498Szrj /* OpenMP clause: grainsize (integer-expression). */ 42138fd1498Szrj OMP_CLAUSE_GRAINSIZE, 42238fd1498Szrj 42338fd1498Szrj /* OpenMP clause: num_tasks (integer-expression). */ 42438fd1498Szrj OMP_CLAUSE_NUM_TASKS, 42538fd1498Szrj 42638fd1498Szrj /* OpenMP clause: nogroup. */ 42738fd1498Szrj OMP_CLAUSE_NOGROUP, 42838fd1498Szrj 42938fd1498Szrj /* OpenMP clause: threads. */ 43038fd1498Szrj OMP_CLAUSE_THREADS, 43138fd1498Szrj 43238fd1498Szrj /* OpenMP clause: simd. */ 43338fd1498Szrj OMP_CLAUSE_SIMD, 43438fd1498Szrj 43538fd1498Szrj /* OpenMP clause: hint (integer-expression). */ 43638fd1498Szrj OMP_CLAUSE_HINT, 43738fd1498Szrj 43838fd1498Szrj /* OpenMP clause: defaultmap (tofrom: scalar). */ 43938fd1498Szrj OMP_CLAUSE_DEFAULTMAP, 44038fd1498Szrj 44138fd1498Szrj /* Internally used only clause, holding SIMD uid. */ 44238fd1498Szrj OMP_CLAUSE__SIMDUID_, 44338fd1498Szrj 44438fd1498Szrj /* Internally used only clause, flag whether this is SIMT simd 44538fd1498Szrj loop or not. */ 44638fd1498Szrj OMP_CLAUSE__SIMT_, 44738fd1498Szrj 44838fd1498Szrj /* OpenACC clause: independent. */ 44938fd1498Szrj OMP_CLAUSE_INDEPENDENT, 45038fd1498Szrj 45138fd1498Szrj /* OpenACC clause: worker [( [num:] integer-expression)]. */ 45238fd1498Szrj OMP_CLAUSE_WORKER, 45338fd1498Szrj 45438fd1498Szrj /* OpenACC clause: vector [( [length:] integer-expression)]. */ 45538fd1498Szrj OMP_CLAUSE_VECTOR, 45638fd1498Szrj 45738fd1498Szrj /* OpenACC clause: num_gangs (integer-expression). */ 45838fd1498Szrj OMP_CLAUSE_NUM_GANGS, 45938fd1498Szrj 46038fd1498Szrj /* OpenACC clause: num_workers (integer-expression). */ 46138fd1498Szrj OMP_CLAUSE_NUM_WORKERS, 46238fd1498Szrj 46338fd1498Szrj /* OpenACC clause: vector_length (integer-expression). */ 46438fd1498Szrj OMP_CLAUSE_VECTOR_LENGTH, 46538fd1498Szrj 46638fd1498Szrj /* OpenACC clause: tile ( size-expr-list ). */ 46738fd1498Szrj OMP_CLAUSE_TILE, 46838fd1498Szrj 46938fd1498Szrj /* OpenMP internal-only clause to specify grid dimensions of a gridified 47038fd1498Szrj kernel. */ 47138fd1498Szrj OMP_CLAUSE__GRIDDIM_ 47238fd1498Szrj }; 47338fd1498Szrj 47438fd1498Szrj #undef DEFTREESTRUCT 47538fd1498Szrj #define DEFTREESTRUCT(ENUM, NAME) ENUM, 47638fd1498Szrj enum tree_node_structure_enum { 47738fd1498Szrj #include "treestruct.def" 47838fd1498Szrj LAST_TS_ENUM 47938fd1498Szrj }; 48038fd1498Szrj #undef DEFTREESTRUCT 48138fd1498Szrj 48238fd1498Szrj enum omp_clause_schedule_kind { 48338fd1498Szrj OMP_CLAUSE_SCHEDULE_STATIC, 48438fd1498Szrj OMP_CLAUSE_SCHEDULE_DYNAMIC, 48538fd1498Szrj OMP_CLAUSE_SCHEDULE_GUIDED, 48638fd1498Szrj OMP_CLAUSE_SCHEDULE_AUTO, 48738fd1498Szrj OMP_CLAUSE_SCHEDULE_RUNTIME, 48838fd1498Szrj OMP_CLAUSE_SCHEDULE_MASK = (1 << 3) - 1, 48938fd1498Szrj OMP_CLAUSE_SCHEDULE_MONOTONIC = (1 << 3), 49038fd1498Szrj OMP_CLAUSE_SCHEDULE_NONMONOTONIC = (1 << 4), 49138fd1498Szrj OMP_CLAUSE_SCHEDULE_LAST = 2 * OMP_CLAUSE_SCHEDULE_NONMONOTONIC - 1 49238fd1498Szrj }; 49338fd1498Szrj 49438fd1498Szrj enum omp_clause_default_kind { 49538fd1498Szrj OMP_CLAUSE_DEFAULT_UNSPECIFIED, 49638fd1498Szrj OMP_CLAUSE_DEFAULT_SHARED, 49738fd1498Szrj OMP_CLAUSE_DEFAULT_NONE, 49838fd1498Szrj OMP_CLAUSE_DEFAULT_PRIVATE, 49938fd1498Szrj OMP_CLAUSE_DEFAULT_FIRSTPRIVATE, 50038fd1498Szrj OMP_CLAUSE_DEFAULT_PRESENT, 50138fd1498Szrj OMP_CLAUSE_DEFAULT_LAST 50238fd1498Szrj }; 50338fd1498Szrj 50438fd1498Szrj /* There is a TYPE_QUAL value for each type qualifier. They can be 50538fd1498Szrj combined by bitwise-or to form the complete set of qualifiers for a 50638fd1498Szrj type. */ 50738fd1498Szrj enum cv_qualifier { 50838fd1498Szrj TYPE_UNQUALIFIED = 0x0, 50938fd1498Szrj TYPE_QUAL_CONST = 0x1, 51038fd1498Szrj TYPE_QUAL_VOLATILE = 0x2, 51138fd1498Szrj TYPE_QUAL_RESTRICT = 0x4, 51238fd1498Szrj TYPE_QUAL_ATOMIC = 0x8 51338fd1498Szrj }; 51438fd1498Szrj 51538fd1498Szrj /* Standard named or nameless data types of the C compiler. */ 51638fd1498Szrj enum tree_index { 51738fd1498Szrj TI_ERROR_MARK, 51838fd1498Szrj TI_INTQI_TYPE, 51938fd1498Szrj TI_INTHI_TYPE, 52038fd1498Szrj TI_INTSI_TYPE, 52138fd1498Szrj TI_INTDI_TYPE, 52238fd1498Szrj TI_INTTI_TYPE, 52338fd1498Szrj 52438fd1498Szrj TI_UINTQI_TYPE, 52538fd1498Szrj TI_UINTHI_TYPE, 52638fd1498Szrj TI_UINTSI_TYPE, 52738fd1498Szrj TI_UINTDI_TYPE, 52838fd1498Szrj TI_UINTTI_TYPE, 52938fd1498Szrj 53038fd1498Szrj TI_ATOMICQI_TYPE, 53138fd1498Szrj TI_ATOMICHI_TYPE, 53238fd1498Szrj TI_ATOMICSI_TYPE, 53338fd1498Szrj TI_ATOMICDI_TYPE, 53438fd1498Szrj TI_ATOMICTI_TYPE, 53538fd1498Szrj 53638fd1498Szrj TI_UINT16_TYPE, 53738fd1498Szrj TI_UINT32_TYPE, 53838fd1498Szrj TI_UINT64_TYPE, 53938fd1498Szrj 54038fd1498Szrj TI_VOID, 54138fd1498Szrj 54238fd1498Szrj TI_INTEGER_ZERO, 54338fd1498Szrj TI_INTEGER_ONE, 54438fd1498Szrj TI_INTEGER_THREE, 54538fd1498Szrj TI_INTEGER_MINUS_ONE, 54638fd1498Szrj TI_NULL_POINTER, 54738fd1498Szrj 54838fd1498Szrj TI_SIZE_ZERO, 54938fd1498Szrj TI_SIZE_ONE, 55038fd1498Szrj 55138fd1498Szrj TI_BITSIZE_ZERO, 55238fd1498Szrj TI_BITSIZE_ONE, 55338fd1498Szrj TI_BITSIZE_UNIT, 55438fd1498Szrj 55538fd1498Szrj TI_PUBLIC, 55638fd1498Szrj TI_PROTECTED, 55738fd1498Szrj TI_PRIVATE, 55838fd1498Szrj 55938fd1498Szrj TI_BOOLEAN_FALSE, 56038fd1498Szrj TI_BOOLEAN_TRUE, 56138fd1498Szrj 56238fd1498Szrj TI_FLOAT_TYPE, 56338fd1498Szrj TI_DOUBLE_TYPE, 56438fd1498Szrj TI_LONG_DOUBLE_TYPE, 56538fd1498Szrj 56638fd1498Szrj /* The _FloatN and _FloatNx types must be consecutive, and in the 56738fd1498Szrj same sequence as the corresponding complex types, which must also 56838fd1498Szrj be consecutive; _FloatN must come before _FloatNx; the order must 56938fd1498Szrj also be the same as in the floatn_nx_types array and the RID_* 57038fd1498Szrj values in c-common.h. This is so that iterations over these 57138fd1498Szrj types work as intended. */ 57238fd1498Szrj TI_FLOAT16_TYPE, 57338fd1498Szrj TI_FLOATN_TYPE_FIRST = TI_FLOAT16_TYPE, 57438fd1498Szrj TI_FLOATN_NX_TYPE_FIRST = TI_FLOAT16_TYPE, 57538fd1498Szrj TI_FLOAT32_TYPE, 57638fd1498Szrj TI_FLOAT64_TYPE, 57738fd1498Szrj TI_FLOAT128_TYPE, 57838fd1498Szrj TI_FLOATN_TYPE_LAST = TI_FLOAT128_TYPE, 57938fd1498Szrj #define NUM_FLOATN_TYPES (TI_FLOATN_TYPE_LAST - TI_FLOATN_TYPE_FIRST + 1) 58038fd1498Szrj TI_FLOAT32X_TYPE, 58138fd1498Szrj TI_FLOATNX_TYPE_FIRST = TI_FLOAT32X_TYPE, 58238fd1498Szrj TI_FLOAT64X_TYPE, 58338fd1498Szrj TI_FLOAT128X_TYPE, 58438fd1498Szrj TI_FLOATNX_TYPE_LAST = TI_FLOAT128X_TYPE, 58538fd1498Szrj TI_FLOATN_NX_TYPE_LAST = TI_FLOAT128X_TYPE, 58638fd1498Szrj #define NUM_FLOATNX_TYPES (TI_FLOATNX_TYPE_LAST - TI_FLOATNX_TYPE_FIRST + 1) 58738fd1498Szrj #define NUM_FLOATN_NX_TYPES (TI_FLOATN_NX_TYPE_LAST \ 58838fd1498Szrj - TI_FLOATN_NX_TYPE_FIRST \ 58938fd1498Szrj + 1) 59038fd1498Szrj 59138fd1498Szrj /* Put the complex types after their component types, so that in (sequential) 59238fd1498Szrj tree streaming we can assert that their component types have already been 59338fd1498Szrj handled (see tree-streamer.c:record_common_node). */ 59438fd1498Szrj TI_COMPLEX_INTEGER_TYPE, 59538fd1498Szrj TI_COMPLEX_FLOAT_TYPE, 59638fd1498Szrj TI_COMPLEX_DOUBLE_TYPE, 59738fd1498Szrj TI_COMPLEX_LONG_DOUBLE_TYPE, 59838fd1498Szrj 59938fd1498Szrj TI_COMPLEX_FLOAT16_TYPE, 60038fd1498Szrj TI_COMPLEX_FLOATN_NX_TYPE_FIRST = TI_COMPLEX_FLOAT16_TYPE, 60138fd1498Szrj TI_COMPLEX_FLOAT32_TYPE, 60238fd1498Szrj TI_COMPLEX_FLOAT64_TYPE, 60338fd1498Szrj TI_COMPLEX_FLOAT128_TYPE, 60438fd1498Szrj TI_COMPLEX_FLOAT32X_TYPE, 60538fd1498Szrj TI_COMPLEX_FLOAT64X_TYPE, 60638fd1498Szrj TI_COMPLEX_FLOAT128X_TYPE, 60738fd1498Szrj 60838fd1498Szrj TI_FLOAT_PTR_TYPE, 60938fd1498Szrj TI_DOUBLE_PTR_TYPE, 61038fd1498Szrj TI_LONG_DOUBLE_PTR_TYPE, 61138fd1498Szrj TI_INTEGER_PTR_TYPE, 61238fd1498Szrj 61338fd1498Szrj TI_VOID_TYPE, 61438fd1498Szrj TI_PTR_TYPE, 61538fd1498Szrj TI_CONST_PTR_TYPE, 61638fd1498Szrj TI_SIZE_TYPE, 61738fd1498Szrj TI_PID_TYPE, 61838fd1498Szrj TI_PTRDIFF_TYPE, 61938fd1498Szrj TI_VA_LIST_TYPE, 62038fd1498Szrj TI_VA_LIST_GPR_COUNTER_FIELD, 62138fd1498Szrj TI_VA_LIST_FPR_COUNTER_FIELD, 62238fd1498Szrj TI_BOOLEAN_TYPE, 62338fd1498Szrj TI_FILEPTR_TYPE, 62438fd1498Szrj TI_CONST_TM_PTR_TYPE, 62538fd1498Szrj TI_FENV_T_PTR_TYPE, 62638fd1498Szrj TI_CONST_FENV_T_PTR_TYPE, 62738fd1498Szrj TI_FEXCEPT_T_PTR_TYPE, 62838fd1498Szrj TI_CONST_FEXCEPT_T_PTR_TYPE, 62938fd1498Szrj TI_POINTER_SIZED_TYPE, 63038fd1498Szrj 63138fd1498Szrj TI_POINTER_BOUNDS_TYPE, 63238fd1498Szrj 63338fd1498Szrj TI_DFLOAT32_TYPE, 63438fd1498Szrj TI_DFLOAT64_TYPE, 63538fd1498Szrj TI_DFLOAT128_TYPE, 63638fd1498Szrj TI_DFLOAT32_PTR_TYPE, 63738fd1498Szrj TI_DFLOAT64_PTR_TYPE, 63838fd1498Szrj TI_DFLOAT128_PTR_TYPE, 63938fd1498Szrj 64038fd1498Szrj TI_VOID_LIST_NODE, 64138fd1498Szrj 64238fd1498Szrj TI_MAIN_IDENTIFIER, 64338fd1498Szrj 64438fd1498Szrj TI_SAT_SFRACT_TYPE, 64538fd1498Szrj TI_SAT_FRACT_TYPE, 64638fd1498Szrj TI_SAT_LFRACT_TYPE, 64738fd1498Szrj TI_SAT_LLFRACT_TYPE, 64838fd1498Szrj TI_SAT_USFRACT_TYPE, 64938fd1498Szrj TI_SAT_UFRACT_TYPE, 65038fd1498Szrj TI_SAT_ULFRACT_TYPE, 65138fd1498Szrj TI_SAT_ULLFRACT_TYPE, 65238fd1498Szrj TI_SFRACT_TYPE, 65338fd1498Szrj TI_FRACT_TYPE, 65438fd1498Szrj TI_LFRACT_TYPE, 65538fd1498Szrj TI_LLFRACT_TYPE, 65638fd1498Szrj TI_USFRACT_TYPE, 65738fd1498Szrj TI_UFRACT_TYPE, 65838fd1498Szrj TI_ULFRACT_TYPE, 65938fd1498Szrj TI_ULLFRACT_TYPE, 66038fd1498Szrj TI_SAT_SACCUM_TYPE, 66138fd1498Szrj TI_SAT_ACCUM_TYPE, 66238fd1498Szrj TI_SAT_LACCUM_TYPE, 66338fd1498Szrj TI_SAT_LLACCUM_TYPE, 66438fd1498Szrj TI_SAT_USACCUM_TYPE, 66538fd1498Szrj TI_SAT_UACCUM_TYPE, 66638fd1498Szrj TI_SAT_ULACCUM_TYPE, 66738fd1498Szrj TI_SAT_ULLACCUM_TYPE, 66838fd1498Szrj TI_SACCUM_TYPE, 66938fd1498Szrj TI_ACCUM_TYPE, 67038fd1498Szrj TI_LACCUM_TYPE, 67138fd1498Szrj TI_LLACCUM_TYPE, 67238fd1498Szrj TI_USACCUM_TYPE, 67338fd1498Szrj TI_UACCUM_TYPE, 67438fd1498Szrj TI_ULACCUM_TYPE, 67538fd1498Szrj TI_ULLACCUM_TYPE, 67638fd1498Szrj TI_QQ_TYPE, 67738fd1498Szrj TI_HQ_TYPE, 67838fd1498Szrj TI_SQ_TYPE, 67938fd1498Szrj TI_DQ_TYPE, 68038fd1498Szrj TI_TQ_TYPE, 68138fd1498Szrj TI_UQQ_TYPE, 68238fd1498Szrj TI_UHQ_TYPE, 68338fd1498Szrj TI_USQ_TYPE, 68438fd1498Szrj TI_UDQ_TYPE, 68538fd1498Szrj TI_UTQ_TYPE, 68638fd1498Szrj TI_SAT_QQ_TYPE, 68738fd1498Szrj TI_SAT_HQ_TYPE, 68838fd1498Szrj TI_SAT_SQ_TYPE, 68938fd1498Szrj TI_SAT_DQ_TYPE, 69038fd1498Szrj TI_SAT_TQ_TYPE, 69138fd1498Szrj TI_SAT_UQQ_TYPE, 69238fd1498Szrj TI_SAT_UHQ_TYPE, 69338fd1498Szrj TI_SAT_USQ_TYPE, 69438fd1498Szrj TI_SAT_UDQ_TYPE, 69538fd1498Szrj TI_SAT_UTQ_TYPE, 69638fd1498Szrj TI_HA_TYPE, 69738fd1498Szrj TI_SA_TYPE, 69838fd1498Szrj TI_DA_TYPE, 69938fd1498Szrj TI_TA_TYPE, 70038fd1498Szrj TI_UHA_TYPE, 70138fd1498Szrj TI_USA_TYPE, 70238fd1498Szrj TI_UDA_TYPE, 70338fd1498Szrj TI_UTA_TYPE, 70438fd1498Szrj TI_SAT_HA_TYPE, 70538fd1498Szrj TI_SAT_SA_TYPE, 70638fd1498Szrj TI_SAT_DA_TYPE, 70738fd1498Szrj TI_SAT_TA_TYPE, 70838fd1498Szrj TI_SAT_UHA_TYPE, 70938fd1498Szrj TI_SAT_USA_TYPE, 71038fd1498Szrj TI_SAT_UDA_TYPE, 71138fd1498Szrj TI_SAT_UTA_TYPE, 71238fd1498Szrj 71338fd1498Szrj TI_OPTIMIZATION_DEFAULT, 71438fd1498Szrj TI_OPTIMIZATION_CURRENT, 71538fd1498Szrj TI_TARGET_OPTION_DEFAULT, 71638fd1498Szrj TI_TARGET_OPTION_CURRENT, 71738fd1498Szrj TI_CURRENT_TARGET_PRAGMA, 71838fd1498Szrj TI_CURRENT_OPTIMIZE_PRAGMA, 71938fd1498Szrj 72038fd1498Szrj TI_MAX 72138fd1498Szrj }; 72238fd1498Szrj 72338fd1498Szrj /* An enumeration of the standard C integer types. These must be 72438fd1498Szrj ordered so that shorter types appear before longer ones, and so 72538fd1498Szrj that signed types appear before unsigned ones, for the correct 72638fd1498Szrj functioning of interpret_integer() in c-lex.c. */ 72738fd1498Szrj enum integer_type_kind { 72838fd1498Szrj itk_char, 72938fd1498Szrj itk_signed_char, 73038fd1498Szrj itk_unsigned_char, 73138fd1498Szrj itk_short, 73238fd1498Szrj itk_unsigned_short, 73338fd1498Szrj itk_int, 73438fd1498Szrj itk_unsigned_int, 73538fd1498Szrj itk_long, 73638fd1498Szrj itk_unsigned_long, 73738fd1498Szrj itk_long_long, 73838fd1498Szrj itk_unsigned_long_long, 73938fd1498Szrj 74038fd1498Szrj itk_intN_0, 74138fd1498Szrj itk_unsigned_intN_0, 74238fd1498Szrj itk_intN_1, 74338fd1498Szrj itk_unsigned_intN_1, 74438fd1498Szrj itk_intN_2, 74538fd1498Szrj itk_unsigned_intN_2, 74638fd1498Szrj itk_intN_3, 74738fd1498Szrj itk_unsigned_intN_3, 74838fd1498Szrj 74938fd1498Szrj itk_none 75038fd1498Szrj }; 75138fd1498Szrj 75238fd1498Szrj /* A pointer-to-function member type looks like: 75338fd1498Szrj 75438fd1498Szrj struct { 75538fd1498Szrj __P __pfn; 75638fd1498Szrj ptrdiff_t __delta; 75738fd1498Szrj }; 75838fd1498Szrj 75938fd1498Szrj If __pfn is NULL, it is a NULL pointer-to-member-function. 76038fd1498Szrj 76138fd1498Szrj (Because the vtable is always the first thing in the object, we 76238fd1498Szrj don't need its offset.) If the function is virtual, then PFN is 76338fd1498Szrj one plus twice the index into the vtable; otherwise, it is just a 76438fd1498Szrj pointer to the function. 76538fd1498Szrj 76638fd1498Szrj Unfortunately, using the lowest bit of PFN doesn't work in 76738fd1498Szrj architectures that don't impose alignment requirements on function 76838fd1498Szrj addresses, or that use the lowest bit to tell one ISA from another, 76938fd1498Szrj for example. For such architectures, we use the lowest bit of 77038fd1498Szrj DELTA instead of the lowest bit of the PFN, and DELTA will be 77138fd1498Szrj multiplied by 2. */ 77238fd1498Szrj enum ptrmemfunc_vbit_where_t { 77338fd1498Szrj ptrmemfunc_vbit_in_pfn, 77438fd1498Szrj ptrmemfunc_vbit_in_delta 77538fd1498Szrj }; 77638fd1498Szrj 77738fd1498Szrj /* Flags that may be passed in the third argument of decl_attributes, and 77838fd1498Szrj to handler functions for attributes. */ 77938fd1498Szrj enum attribute_flags { 78038fd1498Szrj /* The type passed in is the type of a DECL, and any attributes that 78138fd1498Szrj should be passed in again to be applied to the DECL rather than the 78238fd1498Szrj type should be returned. */ 78338fd1498Szrj ATTR_FLAG_DECL_NEXT = 1, 78438fd1498Szrj /* The type passed in is a function return type, and any attributes that 78538fd1498Szrj should be passed in again to be applied to the function type rather 78638fd1498Szrj than the return type should be returned. */ 78738fd1498Szrj ATTR_FLAG_FUNCTION_NEXT = 2, 78838fd1498Szrj /* The type passed in is an array element type, and any attributes that 78938fd1498Szrj should be passed in again to be applied to the array type rather 79038fd1498Szrj than the element type should be returned. */ 79138fd1498Szrj ATTR_FLAG_ARRAY_NEXT = 4, 79238fd1498Szrj /* The type passed in is a structure, union or enumeration type being 79338fd1498Szrj created, and should be modified in place. */ 79438fd1498Szrj ATTR_FLAG_TYPE_IN_PLACE = 8, 79538fd1498Szrj /* The attributes are being applied by default to a library function whose 79638fd1498Szrj name indicates known behavior, and should be silently ignored if they 79738fd1498Szrj are not in fact compatible with the function type. */ 79838fd1498Szrj ATTR_FLAG_BUILT_IN = 16, 79938fd1498Szrj /* A given attribute has been parsed as a C++-11 attribute. */ 80038fd1498Szrj ATTR_FLAG_CXX11 = 32 80138fd1498Szrj }; 80238fd1498Szrj 80338fd1498Szrj /* Types used to represent sizes. */ 80438fd1498Szrj enum size_type_kind { 80538fd1498Szrj stk_sizetype, /* Normal representation of sizes in bytes. */ 80638fd1498Szrj stk_ssizetype, /* Signed representation of sizes in bytes. */ 80738fd1498Szrj stk_bitsizetype, /* Normal representation of sizes in bits. */ 80838fd1498Szrj stk_sbitsizetype, /* Signed representation of sizes in bits. */ 80938fd1498Szrj stk_type_kind_last 81038fd1498Szrj }; 81138fd1498Szrj 81238fd1498Szrj enum operand_equal_flag { 81338fd1498Szrj OEP_ONLY_CONST = 1, 81438fd1498Szrj OEP_PURE_SAME = 2, 81538fd1498Szrj OEP_MATCH_SIDE_EFFECTS = 4, 81638fd1498Szrj OEP_ADDRESS_OF = 8, 81738fd1498Szrj /* Internal within operand_equal_p: */ 81838fd1498Szrj OEP_NO_HASH_CHECK = 16, 81938fd1498Szrj /* Internal within inchash::add_expr: */ 82038fd1498Szrj OEP_HASH_CHECK = 32, 82138fd1498Szrj /* Makes operand_equal_p handle more expressions: */ 82238fd1498Szrj OEP_LEXICOGRAPHIC = 64 82338fd1498Szrj }; 82438fd1498Szrj 82538fd1498Szrj /* Enum and arrays used for tree allocation stats. 82638fd1498Szrj Keep in sync with tree.c:tree_node_kind_names. */ 82738fd1498Szrj enum tree_node_kind { 82838fd1498Szrj d_kind, 82938fd1498Szrj t_kind, 83038fd1498Szrj b_kind, 83138fd1498Szrj s_kind, 83238fd1498Szrj r_kind, 83338fd1498Szrj e_kind, 83438fd1498Szrj c_kind, 83538fd1498Szrj id_kind, 83638fd1498Szrj vec_kind, 83738fd1498Szrj binfo_kind, 83838fd1498Szrj ssa_name_kind, 83938fd1498Szrj constr_kind, 84038fd1498Szrj x_kind, 84138fd1498Szrj lang_decl, 84238fd1498Szrj lang_type, 84338fd1498Szrj omp_clause_kind, 84438fd1498Szrj all_kinds 84538fd1498Szrj }; 84638fd1498Szrj 84738fd1498Szrj enum annot_expr_kind { 84838fd1498Szrj annot_expr_ivdep_kind, 84938fd1498Szrj annot_expr_unroll_kind, 85038fd1498Szrj annot_expr_no_vector_kind, 85138fd1498Szrj annot_expr_vector_kind, 85238fd1498Szrj annot_expr_parallel_kind, 85338fd1498Szrj annot_expr_kind_last 85438fd1498Szrj }; 85538fd1498Szrj 85638fd1498Szrj /*--------------------------------------------------------------------------- 85738fd1498Szrj Type definitions 85838fd1498Szrj ---------------------------------------------------------------------------*/ 85938fd1498Szrj /* When processing aliases at the symbol table level, we need the 86038fd1498Szrj declaration of target. For this reason we need to queue aliases and 86138fd1498Szrj process them after all declarations has been produced. */ 86238fd1498Szrj struct GTY(()) alias_pair { 86338fd1498Szrj tree decl; 86438fd1498Szrj tree target; 86538fd1498Szrj }; 86638fd1498Szrj 86738fd1498Szrj /* An initialization priority. */ 86838fd1498Szrj typedef unsigned short priority_type; 86938fd1498Szrj 87038fd1498Szrj /* The type of a callback function for walking over tree structure. */ 87138fd1498Szrj typedef tree (*walk_tree_fn) (tree *, int *, void *); 87238fd1498Szrj 87338fd1498Szrj /* The type of a callback function that represents a custom walk_tree. */ 87438fd1498Szrj typedef tree (*walk_tree_lh) (tree *, int *, tree (*) (tree *, int *, void *), 87538fd1498Szrj void *, hash_set<tree> *); 87638fd1498Szrj 87738fd1498Szrj 87838fd1498Szrj /*--------------------------------------------------------------------------- 87938fd1498Szrj Main data structures 88038fd1498Szrj ---------------------------------------------------------------------------*/ 88138fd1498Szrj /* A tree node can represent a data type, a variable, an expression 88238fd1498Szrj or a statement. Each node has a TREE_CODE which says what kind of 88338fd1498Szrj thing it represents. Some common codes are: 88438fd1498Szrj INTEGER_TYPE -- represents a type of integers. 88538fd1498Szrj ARRAY_TYPE -- represents a type of pointer. 88638fd1498Szrj VAR_DECL -- represents a declared variable. 88738fd1498Szrj INTEGER_CST -- represents a constant integer value. 88838fd1498Szrj PLUS_EXPR -- represents a sum (an expression). 88938fd1498Szrj 89038fd1498Szrj As for the contents of a tree node: there are some fields 89138fd1498Szrj that all nodes share. Each TREE_CODE has various special-purpose 89238fd1498Szrj fields as well. The fields of a node are never accessed directly, 89338fd1498Szrj always through accessor macros. */ 89438fd1498Szrj 89538fd1498Szrj /* Every kind of tree node starts with this structure, 89638fd1498Szrj so all nodes have these fields. 89738fd1498Szrj 89838fd1498Szrj See the accessor macros, defined below, for documentation of the 89938fd1498Szrj fields, and the table below which connects the fields and the 90038fd1498Szrj accessor macros. */ 90138fd1498Szrj 90238fd1498Szrj struct GTY(()) tree_base { 90338fd1498Szrj ENUM_BITFIELD(tree_code) code : 16; 90438fd1498Szrj 90538fd1498Szrj unsigned side_effects_flag : 1; 90638fd1498Szrj unsigned constant_flag : 1; 90738fd1498Szrj unsigned addressable_flag : 1; 90838fd1498Szrj unsigned volatile_flag : 1; 90938fd1498Szrj unsigned readonly_flag : 1; 91038fd1498Szrj unsigned asm_written_flag: 1; 91138fd1498Szrj unsigned nowarning_flag : 1; 91238fd1498Szrj unsigned visited : 1; 91338fd1498Szrj 91438fd1498Szrj unsigned used_flag : 1; 91538fd1498Szrj unsigned nothrow_flag : 1; 91638fd1498Szrj unsigned static_flag : 1; 91738fd1498Szrj unsigned public_flag : 1; 91838fd1498Szrj unsigned private_flag : 1; 91938fd1498Szrj unsigned protected_flag : 1; 92038fd1498Szrj unsigned deprecated_flag : 1; 92138fd1498Szrj unsigned default_def_flag : 1; 92238fd1498Szrj 92338fd1498Szrj union { 92438fd1498Szrj /* The bits in the following structure should only be used with 92538fd1498Szrj accessor macros that constrain inputs with tree checking. */ 92638fd1498Szrj struct { 92738fd1498Szrj unsigned lang_flag_0 : 1; 92838fd1498Szrj unsigned lang_flag_1 : 1; 92938fd1498Szrj unsigned lang_flag_2 : 1; 93038fd1498Szrj unsigned lang_flag_3 : 1; 93138fd1498Szrj unsigned lang_flag_4 : 1; 93238fd1498Szrj unsigned lang_flag_5 : 1; 93338fd1498Szrj unsigned lang_flag_6 : 1; 93438fd1498Szrj unsigned saturating_flag : 1; 93538fd1498Szrj 93638fd1498Szrj unsigned unsigned_flag : 1; 93738fd1498Szrj unsigned packed_flag : 1; 93838fd1498Szrj unsigned user_align : 1; 93938fd1498Szrj unsigned nameless_flag : 1; 94038fd1498Szrj unsigned atomic_flag : 1; 94138fd1498Szrj unsigned spare0 : 3; 94238fd1498Szrj 94338fd1498Szrj unsigned spare1 : 8; 94438fd1498Szrj 94538fd1498Szrj /* This field is only used with TREE_TYPE nodes; the only reason it is 94638fd1498Szrj present in tree_base instead of tree_type is to save space. The size 94738fd1498Szrj of the field must be large enough to hold addr_space_t values. */ 94838fd1498Szrj unsigned address_space : 8; 94938fd1498Szrj } bits; 95038fd1498Szrj 95138fd1498Szrj /* The following fields are present in tree_base to save space. The 95238fd1498Szrj nodes using them do not require any of the flags above and so can 95338fd1498Szrj make better use of the 4-byte sized word. */ 95438fd1498Szrj 95538fd1498Szrj /* The number of HOST_WIDE_INTs in an INTEGER_CST. */ 95638fd1498Szrj struct { 95738fd1498Szrj /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in 95838fd1498Szrj its native precision. */ 95938fd1498Szrj unsigned char unextended; 96038fd1498Szrj 96138fd1498Szrj /* The number of HOST_WIDE_INTs if the INTEGER_CST is extended to 96238fd1498Szrj wider precisions based on its TYPE_SIGN. */ 96338fd1498Szrj unsigned char extended; 96438fd1498Szrj 96538fd1498Szrj /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in 96638fd1498Szrj offset_int precision, with smaller integers being extended 96738fd1498Szrj according to their TYPE_SIGN. This is equal to one of the two 96838fd1498Szrj fields above but is cached for speed. */ 96938fd1498Szrj unsigned char offset; 97038fd1498Szrj } int_length; 97138fd1498Szrj 97238fd1498Szrj /* VEC length. This field is only used with TREE_VEC. */ 97338fd1498Szrj int length; 97438fd1498Szrj 97538fd1498Szrj /* This field is only used with VECTOR_CST. */ 97638fd1498Szrj struct { 97738fd1498Szrj /* The value of VECTOR_CST_LOG2_NPATTERNS. */ 97838fd1498Szrj unsigned int log2_npatterns : 8; 97938fd1498Szrj 98038fd1498Szrj /* The value of VECTOR_CST_NELTS_PER_PATTERN. */ 98138fd1498Szrj unsigned int nelts_per_pattern : 8; 98238fd1498Szrj 98338fd1498Szrj /* For future expansion. */ 98438fd1498Szrj unsigned int unused : 16; 98538fd1498Szrj } vector_cst; 98638fd1498Szrj 98738fd1498Szrj /* SSA version number. This field is only used with SSA_NAME. */ 98838fd1498Szrj unsigned int version; 98938fd1498Szrj 99038fd1498Szrj /* CHREC_VARIABLE. This field is only used with POLYNOMIAL_CHREC. */ 99138fd1498Szrj unsigned int chrec_var; 99238fd1498Szrj 99338fd1498Szrj /* Internal function code. */ 99438fd1498Szrj enum internal_fn ifn; 99538fd1498Szrj 99638fd1498Szrj /* The following two fields are used for MEM_REF and TARGET_MEM_REF 99738fd1498Szrj expression trees and specify known data non-dependences. For 99838fd1498Szrj two memory references in a function they are known to not 99938fd1498Szrj alias if dependence_info.clique are equal and dependence_info.base 100038fd1498Szrj are distinct. */ 100138fd1498Szrj struct { 100238fd1498Szrj unsigned short clique; 100338fd1498Szrj unsigned short base; 100438fd1498Szrj } dependence_info; 100538fd1498Szrj } GTY((skip(""))) u; 100638fd1498Szrj }; 100738fd1498Szrj 100838fd1498Szrj /* The following table lists the uses of each of the above flags and 100938fd1498Szrj for which types of nodes they are defined. 101038fd1498Szrj 101138fd1498Szrj addressable_flag: 101238fd1498Szrj 101338fd1498Szrj TREE_ADDRESSABLE in 101438fd1498Szrj VAR_DECL, PARM_DECL, RESULT_DECL, FUNCTION_DECL, LABEL_DECL 101538fd1498Szrj SSA_NAME 101638fd1498Szrj all types 101738fd1498Szrj CONSTRUCTOR, IDENTIFIER_NODE 101838fd1498Szrj STMT_EXPR 101938fd1498Szrj 102038fd1498Szrj CALL_EXPR_TAILCALL in 102138fd1498Szrj CALL_EXPR 102238fd1498Szrj 102338fd1498Szrj CASE_LOW_SEEN in 102438fd1498Szrj CASE_LABEL_EXPR 102538fd1498Szrj 102638fd1498Szrj PREDICT_EXPR_OUTCOME in 102738fd1498Szrj PREDICT_EXPR 102838fd1498Szrj 102938fd1498Szrj static_flag: 103038fd1498Szrj 103138fd1498Szrj TREE_STATIC in 103238fd1498Szrj VAR_DECL, FUNCTION_DECL 103338fd1498Szrj CONSTRUCTOR 103438fd1498Szrj 103538fd1498Szrj TREE_NO_TRAMPOLINE in 103638fd1498Szrj ADDR_EXPR 103738fd1498Szrj 103838fd1498Szrj BINFO_VIRTUAL_P in 103938fd1498Szrj TREE_BINFO 104038fd1498Szrj 104138fd1498Szrj TREE_SYMBOL_REFERENCED in 104238fd1498Szrj IDENTIFIER_NODE 104338fd1498Szrj 104438fd1498Szrj CLEANUP_EH_ONLY in 104538fd1498Szrj TARGET_EXPR, WITH_CLEANUP_EXPR 104638fd1498Szrj 104738fd1498Szrj TRY_CATCH_IS_CLEANUP in 104838fd1498Szrj TRY_CATCH_EXPR 104938fd1498Szrj 105038fd1498Szrj ASM_INPUT_P in 105138fd1498Szrj ASM_EXPR 105238fd1498Szrj 105338fd1498Szrj TYPE_REF_CAN_ALIAS_ALL in 105438fd1498Szrj POINTER_TYPE, REFERENCE_TYPE 105538fd1498Szrj 105638fd1498Szrj CASE_HIGH_SEEN in 105738fd1498Szrj CASE_LABEL_EXPR 105838fd1498Szrj 105938fd1498Szrj ENUM_IS_SCOPED in 106038fd1498Szrj ENUMERAL_TYPE 106138fd1498Szrj 106238fd1498Szrj TRANSACTION_EXPR_OUTER in 106338fd1498Szrj TRANSACTION_EXPR 106438fd1498Szrj 106538fd1498Szrj SSA_NAME_ANTI_RANGE_P in 106638fd1498Szrj SSA_NAME 106738fd1498Szrj 106838fd1498Szrj MUST_TAIL_CALL in 106938fd1498Szrj CALL_EXPR 107038fd1498Szrj 107138fd1498Szrj public_flag: 107238fd1498Szrj 107338fd1498Szrj TREE_OVERFLOW in 107438fd1498Szrj INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST 107538fd1498Szrj 107638fd1498Szrj TREE_PUBLIC in 107738fd1498Szrj VAR_DECL, FUNCTION_DECL 107838fd1498Szrj IDENTIFIER_NODE 107938fd1498Szrj 108038fd1498Szrj CONSTRUCTOR_NO_CLEARING in 108138fd1498Szrj CONSTRUCTOR 108238fd1498Szrj 108338fd1498Szrj ASM_VOLATILE_P in 108438fd1498Szrj ASM_EXPR 108538fd1498Szrj 108638fd1498Szrj CALL_EXPR_VA_ARG_PACK in 108738fd1498Szrj CALL_EXPR 108838fd1498Szrj 108938fd1498Szrj TYPE_CACHED_VALUES_P in 109038fd1498Szrj all types 109138fd1498Szrj 109238fd1498Szrj SAVE_EXPR_RESOLVED_P in 109338fd1498Szrj SAVE_EXPR 109438fd1498Szrj 109538fd1498Szrj OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE in 109638fd1498Szrj OMP_CLAUSE_LASTPRIVATE 109738fd1498Szrj 109838fd1498Szrj OMP_CLAUSE_PRIVATE_DEBUG in 109938fd1498Szrj OMP_CLAUSE_PRIVATE 110038fd1498Szrj 110138fd1498Szrj OMP_CLAUSE_LINEAR_NO_COPYIN in 110238fd1498Szrj OMP_CLAUSE_LINEAR 110338fd1498Szrj 110438fd1498Szrj OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION in 110538fd1498Szrj OMP_CLAUSE_MAP 110638fd1498Szrj 110738fd1498Szrj OMP_CLAUSE_REDUCTION_OMP_ORIG_REF in 110838fd1498Szrj OMP_CLAUSE_REDUCTION 110938fd1498Szrj 111038fd1498Szrj TRANSACTION_EXPR_RELAXED in 111138fd1498Szrj TRANSACTION_EXPR 111238fd1498Szrj 111338fd1498Szrj FALLTHROUGH_LABEL_P in 111438fd1498Szrj LABEL_DECL 111538fd1498Szrj 111638fd1498Szrj SSA_NAME_IS_VIRTUAL_OPERAND in 111738fd1498Szrj SSA_NAME 111838fd1498Szrj 111938fd1498Szrj EXPR_LOCATION_WRAPPER_P in 112038fd1498Szrj NON_LVALUE_EXPR, VIEW_CONVERT_EXPR 112138fd1498Szrj 112238fd1498Szrj private_flag: 112338fd1498Szrj 112438fd1498Szrj TREE_PRIVATE in 112538fd1498Szrj all decls 112638fd1498Szrj 112738fd1498Szrj CALL_EXPR_RETURN_SLOT_OPT in 112838fd1498Szrj CALL_EXPR 112938fd1498Szrj 113038fd1498Szrj OMP_SECTION_LAST in 113138fd1498Szrj OMP_SECTION 113238fd1498Szrj 113338fd1498Szrj OMP_PARALLEL_COMBINED in 113438fd1498Szrj OMP_PARALLEL 113538fd1498Szrj 113638fd1498Szrj OMP_ATOMIC_SEQ_CST in 113738fd1498Szrj OMP_ATOMIC* 113838fd1498Szrj 113938fd1498Szrj OMP_CLAUSE_PRIVATE_OUTER_REF in 114038fd1498Szrj OMP_CLAUSE_PRIVATE 114138fd1498Szrj 114238fd1498Szrj OMP_CLAUSE_LINEAR_NO_COPYOUT in 114338fd1498Szrj OMP_CLAUSE_LINEAR 114438fd1498Szrj 114538fd1498Szrj TYPE_REF_IS_RVALUE in 114638fd1498Szrj REFERENCE_TYPE 114738fd1498Szrj 114838fd1498Szrj ENUM_IS_OPAQUE in 114938fd1498Szrj ENUMERAL_TYPE 115038fd1498Szrj 115138fd1498Szrj protected_flag: 115238fd1498Szrj 115338fd1498Szrj TREE_PROTECTED in 115438fd1498Szrj BLOCK 115538fd1498Szrj all decls 115638fd1498Szrj 115738fd1498Szrj CALL_FROM_THUNK_P and 115838fd1498Szrj CALL_ALLOCA_FOR_VAR_P in 115938fd1498Szrj CALL_EXPR 116038fd1498Szrj 116138fd1498Szrj OMP_CLAUSE_LINEAR_VARIABLE_STRIDE in 116238fd1498Szrj OMP_CLAUSE_LINEAR 116338fd1498Szrj 1164*58e805e6Szrj ASM_INLINE_P in 1165*58e805e6Szrj ASM_EXPR 1166*58e805e6Szrj 116738fd1498Szrj side_effects_flag: 116838fd1498Szrj 116938fd1498Szrj TREE_SIDE_EFFECTS in 117038fd1498Szrj all expressions 117138fd1498Szrj all decls 117238fd1498Szrj all constants 117338fd1498Szrj 117438fd1498Szrj FORCED_LABEL in 117538fd1498Szrj LABEL_DECL 117638fd1498Szrj 117738fd1498Szrj volatile_flag: 117838fd1498Szrj 117938fd1498Szrj TREE_THIS_VOLATILE in 118038fd1498Szrj all expressions 118138fd1498Szrj all decls 118238fd1498Szrj 118338fd1498Szrj TYPE_VOLATILE in 118438fd1498Szrj all types 118538fd1498Szrj 118638fd1498Szrj readonly_flag: 118738fd1498Szrj 118838fd1498Szrj TREE_READONLY in 118938fd1498Szrj all expressions 119038fd1498Szrj all decls 119138fd1498Szrj 119238fd1498Szrj TYPE_READONLY in 119338fd1498Szrj all types 119438fd1498Szrj 119538fd1498Szrj constant_flag: 119638fd1498Szrj 119738fd1498Szrj TREE_CONSTANT in 119838fd1498Szrj all expressions 119938fd1498Szrj all decls 120038fd1498Szrj all constants 120138fd1498Szrj 120238fd1498Szrj TYPE_SIZES_GIMPLIFIED in 120338fd1498Szrj all types 120438fd1498Szrj 120538fd1498Szrj unsigned_flag: 120638fd1498Szrj 120738fd1498Szrj TYPE_UNSIGNED in 120838fd1498Szrj all types 120938fd1498Szrj 121038fd1498Szrj DECL_UNSIGNED in 121138fd1498Szrj all decls 121238fd1498Szrj 121338fd1498Szrj asm_written_flag: 121438fd1498Szrj 121538fd1498Szrj TREE_ASM_WRITTEN in 121638fd1498Szrj VAR_DECL, FUNCTION_DECL, TYPE_DECL 121738fd1498Szrj RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE 121838fd1498Szrj BLOCK, STRING_CST 121938fd1498Szrj 122038fd1498Szrj SSA_NAME_OCCURS_IN_ABNORMAL_PHI in 122138fd1498Szrj SSA_NAME 122238fd1498Szrj 122338fd1498Szrj used_flag: 122438fd1498Szrj 122538fd1498Szrj TREE_USED in 122638fd1498Szrj all expressions 122738fd1498Szrj all decls 122838fd1498Szrj IDENTIFIER_NODE 122938fd1498Szrj 123038fd1498Szrj nothrow_flag: 123138fd1498Szrj 123238fd1498Szrj TREE_NOTHROW in 123338fd1498Szrj CALL_EXPR 123438fd1498Szrj FUNCTION_DECL 123538fd1498Szrj 123638fd1498Szrj TREE_THIS_NOTRAP in 123738fd1498Szrj INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF 123838fd1498Szrj 123938fd1498Szrj SSA_NAME_IN_FREE_LIST in 124038fd1498Szrj SSA_NAME 124138fd1498Szrj 124238fd1498Szrj DECL_NONALIASED in 124338fd1498Szrj VAR_DECL 124438fd1498Szrj 124538fd1498Szrj deprecated_flag: 124638fd1498Szrj 124738fd1498Szrj TREE_DEPRECATED in 124838fd1498Szrj all decls 124938fd1498Szrj all types 125038fd1498Szrj 125138fd1498Szrj IDENTIFIER_TRANSPARENT_ALIAS in 125238fd1498Szrj IDENTIFIER_NODE 125338fd1498Szrj 125438fd1498Szrj visited: 125538fd1498Szrj 125638fd1498Szrj TREE_VISITED in 125738fd1498Szrj all trees (used liberally by many passes) 125838fd1498Szrj 125938fd1498Szrj saturating_flag: 126038fd1498Szrj 126138fd1498Szrj TYPE_REVERSE_STORAGE_ORDER in 126238fd1498Szrj RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ARRAY_TYPE 126338fd1498Szrj 126438fd1498Szrj TYPE_SATURATING in 126538fd1498Szrj other types 126638fd1498Szrj 126738fd1498Szrj VAR_DECL_IS_VIRTUAL_OPERAND in 126838fd1498Szrj VAR_DECL 126938fd1498Szrj 127038fd1498Szrj nowarning_flag: 127138fd1498Szrj 127238fd1498Szrj TREE_NO_WARNING in 127338fd1498Szrj all expressions 127438fd1498Szrj all decls 127538fd1498Szrj 127638fd1498Szrj TYPE_ARTIFICIAL in 127738fd1498Szrj all types 127838fd1498Szrj 127938fd1498Szrj default_def_flag: 128038fd1498Szrj 128138fd1498Szrj TYPE_FINAL_P in 128238fd1498Szrj RECORD_TYPE, UNION_TYPE and QUAL_UNION_TYPE 128338fd1498Szrj 128438fd1498Szrj TYPE_VECTOR_OPAQUE in 128538fd1498Szrj VECTOR_TYPE 128638fd1498Szrj 128738fd1498Szrj SSA_NAME_IS_DEFAULT_DEF in 128838fd1498Szrj SSA_NAME 128938fd1498Szrj 129038fd1498Szrj DECL_NONLOCAL_FRAME in 129138fd1498Szrj VAR_DECL 129238fd1498Szrj 129338fd1498Szrj REF_REVERSE_STORAGE_ORDER in 129438fd1498Szrj BIT_FIELD_REF, MEM_REF 129538fd1498Szrj 129638fd1498Szrj FUNC_ADDR_BY_DESCRIPTOR in 129738fd1498Szrj ADDR_EXPR 129838fd1498Szrj 129938fd1498Szrj CALL_EXPR_BY_DESCRIPTOR in 130038fd1498Szrj CALL_EXPR 130138fd1498Szrj */ 130238fd1498Szrj 130338fd1498Szrj struct GTY(()) tree_typed { 130438fd1498Szrj struct tree_base base; 130538fd1498Szrj tree type; 130638fd1498Szrj }; 130738fd1498Szrj 130838fd1498Szrj struct GTY(()) tree_common { 130938fd1498Szrj struct tree_typed typed; 131038fd1498Szrj tree chain; 131138fd1498Szrj }; 131238fd1498Szrj 131338fd1498Szrj struct GTY(()) tree_int_cst { 131438fd1498Szrj struct tree_typed typed; 131538fd1498Szrj HOST_WIDE_INT val[1]; 131638fd1498Szrj }; 131738fd1498Szrj 131838fd1498Szrj 131938fd1498Szrj struct GTY(()) tree_real_cst { 132038fd1498Szrj struct tree_typed typed; 132138fd1498Szrj struct real_value * real_cst_ptr; 132238fd1498Szrj }; 132338fd1498Szrj 132438fd1498Szrj struct GTY(()) tree_fixed_cst { 132538fd1498Szrj struct tree_typed typed; 132638fd1498Szrj struct fixed_value * fixed_cst_ptr; 132738fd1498Szrj }; 132838fd1498Szrj 132938fd1498Szrj struct GTY(()) tree_string { 133038fd1498Szrj struct tree_typed typed; 133138fd1498Szrj int length; 133238fd1498Szrj char str[1]; 133338fd1498Szrj }; 133438fd1498Szrj 133538fd1498Szrj struct GTY(()) tree_complex { 133638fd1498Szrj struct tree_typed typed; 133738fd1498Szrj tree real; 133838fd1498Szrj tree imag; 133938fd1498Szrj }; 134038fd1498Szrj 134138fd1498Szrj struct GTY(()) tree_vector { 134238fd1498Szrj struct tree_typed typed; 134338fd1498Szrj tree GTY ((length ("vector_cst_encoded_nelts ((tree) &%h)"))) elts[1]; 134438fd1498Szrj }; 134538fd1498Szrj 134638fd1498Szrj struct GTY(()) tree_poly_int_cst { 134738fd1498Szrj struct tree_typed typed; 134838fd1498Szrj tree coeffs[NUM_POLY_INT_COEFFS]; 134938fd1498Szrj }; 135038fd1498Szrj 135138fd1498Szrj struct GTY(()) tree_identifier { 135238fd1498Szrj struct tree_common common; 135338fd1498Szrj struct ht_identifier id; 135438fd1498Szrj }; 135538fd1498Szrj 135638fd1498Szrj struct GTY(()) tree_list { 135738fd1498Szrj struct tree_common common; 135838fd1498Szrj tree purpose; 135938fd1498Szrj tree value; 136038fd1498Szrj }; 136138fd1498Szrj 136238fd1498Szrj struct GTY(()) tree_vec { 136338fd1498Szrj struct tree_common common; 136438fd1498Szrj tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1]; 136538fd1498Szrj }; 136638fd1498Szrj 136738fd1498Szrj /* A single element of a CONSTRUCTOR. VALUE holds the actual value of the 136838fd1498Szrj element. INDEX can optionally design the position of VALUE: in arrays, 136938fd1498Szrj it is the index where VALUE has to be placed; in structures, it is the 137038fd1498Szrj FIELD_DECL of the member. */ 137138fd1498Szrj struct GTY(()) constructor_elt { 137238fd1498Szrj tree index; 137338fd1498Szrj tree value; 137438fd1498Szrj }; 137538fd1498Szrj 137638fd1498Szrj struct GTY(()) tree_constructor { 137738fd1498Szrj struct tree_typed typed; 137838fd1498Szrj vec<constructor_elt, va_gc> *elts; 137938fd1498Szrj }; 138038fd1498Szrj 138138fd1498Szrj enum omp_clause_depend_kind 138238fd1498Szrj { 138338fd1498Szrj OMP_CLAUSE_DEPEND_IN, 138438fd1498Szrj OMP_CLAUSE_DEPEND_OUT, 138538fd1498Szrj OMP_CLAUSE_DEPEND_INOUT, 138638fd1498Szrj OMP_CLAUSE_DEPEND_SOURCE, 138738fd1498Szrj OMP_CLAUSE_DEPEND_SINK, 138838fd1498Szrj OMP_CLAUSE_DEPEND_LAST 138938fd1498Szrj }; 139038fd1498Szrj 139138fd1498Szrj enum omp_clause_proc_bind_kind 139238fd1498Szrj { 139338fd1498Szrj /* Numbers should match omp_proc_bind_t enum in omp.h. */ 139438fd1498Szrj OMP_CLAUSE_PROC_BIND_FALSE = 0, 139538fd1498Szrj OMP_CLAUSE_PROC_BIND_TRUE = 1, 139638fd1498Szrj OMP_CLAUSE_PROC_BIND_MASTER = 2, 139738fd1498Szrj OMP_CLAUSE_PROC_BIND_CLOSE = 3, 139838fd1498Szrj OMP_CLAUSE_PROC_BIND_SPREAD = 4, 139938fd1498Szrj OMP_CLAUSE_PROC_BIND_LAST 140038fd1498Szrj }; 140138fd1498Szrj 140238fd1498Szrj enum omp_clause_linear_kind 140338fd1498Szrj { 140438fd1498Szrj OMP_CLAUSE_LINEAR_DEFAULT, 140538fd1498Szrj OMP_CLAUSE_LINEAR_REF, 140638fd1498Szrj OMP_CLAUSE_LINEAR_VAL, 140738fd1498Szrj OMP_CLAUSE_LINEAR_UVAL 140838fd1498Szrj }; 140938fd1498Szrj 141038fd1498Szrj struct GTY(()) tree_exp { 141138fd1498Szrj struct tree_typed typed; 141238fd1498Szrj location_t locus; 141338fd1498Szrj tree GTY ((special ("tree_exp"), 141438fd1498Szrj desc ("TREE_CODE ((tree) &%0)"))) 141538fd1498Szrj operands[1]; 141638fd1498Szrj }; 141738fd1498Szrj 141838fd1498Szrj /* Immediate use linking structure. This structure is used for maintaining 141938fd1498Szrj a doubly linked list of uses of an SSA_NAME. */ 142038fd1498Szrj struct GTY(()) ssa_use_operand_t { 142138fd1498Szrj struct ssa_use_operand_t* GTY((skip(""))) prev; 142238fd1498Szrj struct ssa_use_operand_t* GTY((skip(""))) next; 142338fd1498Szrj /* Immediate uses for a given SSA name are maintained as a cyclic 142438fd1498Szrj list. To recognize the root of this list, the location field 142538fd1498Szrj needs to point to the original SSA name. Since statements and 142638fd1498Szrj SSA names are of different data types, we need this union. See 142738fd1498Szrj the explanation in struct imm_use_iterator. */ 142838fd1498Szrj union { gimple *stmt; tree ssa_name; } GTY((skip(""))) loc; 142938fd1498Szrj tree *GTY((skip(""))) use; 143038fd1498Szrj }; 143138fd1498Szrj 143238fd1498Szrj struct GTY(()) tree_ssa_name { 143338fd1498Szrj struct tree_typed typed; 143438fd1498Szrj 143538fd1498Szrj /* _DECL wrapped by this SSA name. */ 143638fd1498Szrj tree var; 143738fd1498Szrj 143838fd1498Szrj /* Statement that defines this SSA name. */ 143938fd1498Szrj gimple *def_stmt; 144038fd1498Szrj 144138fd1498Szrj /* Value range information. */ 144238fd1498Szrj union ssa_name_info_type { 144338fd1498Szrj /* Pointer attributes used for alias analysis. */ 144438fd1498Szrj struct GTY ((tag ("0"))) ptr_info_def *ptr_info; 144538fd1498Szrj /* Value range attributes used for zero/sign extension elimination. */ 144638fd1498Szrj struct GTY ((tag ("1"))) range_info_def *range_info; 144738fd1498Szrj } GTY ((desc ("%1.typed.type ?" \ 144838fd1498Szrj "!POINTER_TYPE_P (TREE_TYPE ((tree)&%1)) : 2"))) info; 144938fd1498Szrj 145038fd1498Szrj /* Immediate uses list for this SSA_NAME. */ 145138fd1498Szrj struct ssa_use_operand_t imm_uses; 145238fd1498Szrj }; 145338fd1498Szrj 145438fd1498Szrj struct GTY(()) phi_arg_d { 145538fd1498Szrj /* imm_use MUST be the first element in struct because we do some 145638fd1498Szrj pointer arithmetic with it. See phi_arg_index_from_use. */ 145738fd1498Szrj struct ssa_use_operand_t imm_use; 145838fd1498Szrj tree def; 145938fd1498Szrj location_t locus; 146038fd1498Szrj }; 146138fd1498Szrj 146238fd1498Szrj struct GTY(()) tree_omp_clause { 146338fd1498Szrj struct tree_common common; 146438fd1498Szrj location_t locus; 146538fd1498Szrj enum omp_clause_code code; 146638fd1498Szrj union omp_clause_subcode { 146738fd1498Szrj enum omp_clause_default_kind default_kind; 146838fd1498Szrj enum omp_clause_schedule_kind schedule_kind; 146938fd1498Szrj enum omp_clause_depend_kind depend_kind; 147038fd1498Szrj /* See include/gomp-constants.h for enum gomp_map_kind's values. */ 147138fd1498Szrj unsigned int map_kind; 147238fd1498Szrj enum omp_clause_proc_bind_kind proc_bind_kind; 147338fd1498Szrj enum tree_code reduction_code; 147438fd1498Szrj enum omp_clause_linear_kind linear_kind; 147538fd1498Szrj enum tree_code if_modifier; 147638fd1498Szrj /* The dimension a OMP_CLAUSE__GRIDDIM_ clause of a gridified target 147738fd1498Szrj construct describes. */ 147838fd1498Szrj unsigned int dimension; 147938fd1498Szrj } GTY ((skip)) subcode; 148038fd1498Szrj 148138fd1498Szrj /* The gimplification of OMP_CLAUSE_REDUCTION_{INIT,MERGE} for omp-low's 148238fd1498Szrj usage. */ 148338fd1498Szrj gimple_seq gimple_reduction_init; 148438fd1498Szrj gimple_seq gimple_reduction_merge; 148538fd1498Szrj 148638fd1498Szrj tree GTY ((length ("omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]"))) 148738fd1498Szrj ops[1]; 148838fd1498Szrj }; 148938fd1498Szrj 149038fd1498Szrj struct GTY(()) tree_block { 149138fd1498Szrj struct tree_base base; 149238fd1498Szrj tree chain; 149338fd1498Szrj 149438fd1498Szrj unsigned abstract_flag : 1; 149538fd1498Szrj unsigned block_num : 31; 149638fd1498Szrj 149738fd1498Szrj location_t locus; 149838fd1498Szrj location_t end_locus; 149938fd1498Szrj 150038fd1498Szrj tree vars; 150138fd1498Szrj vec<tree, va_gc> *nonlocalized_vars; 150238fd1498Szrj 150338fd1498Szrj tree subblocks; 150438fd1498Szrj tree supercontext; 150538fd1498Szrj tree abstract_origin; 150638fd1498Szrj tree fragment_origin; 150738fd1498Szrj tree fragment_chain; 150838fd1498Szrj 150938fd1498Szrj /* Pointer to the DWARF lexical block. */ 151038fd1498Szrj struct die_struct *die; 151138fd1498Szrj }; 151238fd1498Szrj 151338fd1498Szrj struct GTY(()) tree_type_common { 151438fd1498Szrj struct tree_common common; 151538fd1498Szrj tree size; 151638fd1498Szrj tree size_unit; 151738fd1498Szrj tree attributes; 151838fd1498Szrj unsigned int uid; 151938fd1498Szrj 152038fd1498Szrj unsigned int precision : 10; 152138fd1498Szrj unsigned no_force_blk_flag : 1; 152238fd1498Szrj unsigned needs_constructing_flag : 1; 152338fd1498Szrj unsigned transparent_aggr_flag : 1; 152438fd1498Szrj unsigned restrict_flag : 1; 152538fd1498Szrj unsigned contains_placeholder_bits : 2; 152638fd1498Szrj 152738fd1498Szrj ENUM_BITFIELD(machine_mode) mode : 8; 152838fd1498Szrj 152938fd1498Szrj unsigned string_flag : 1; 153038fd1498Szrj unsigned lang_flag_0 : 1; 153138fd1498Szrj unsigned lang_flag_1 : 1; 153238fd1498Szrj unsigned lang_flag_2 : 1; 153338fd1498Szrj unsigned lang_flag_3 : 1; 153438fd1498Szrj unsigned lang_flag_4 : 1; 153538fd1498Szrj unsigned lang_flag_5 : 1; 153638fd1498Szrj unsigned lang_flag_6 : 1; 153738fd1498Szrj unsigned lang_flag_7 : 1; 153838fd1498Szrj 153938fd1498Szrj /* TYPE_ALIGN in log2; this has to be large enough to hold values 154038fd1498Szrj of the maximum of BIGGEST_ALIGNMENT and MAX_OFILE_ALIGNMENT, 154138fd1498Szrj the latter being usually the larger. For ELF it is 8<<28, 154238fd1498Szrj so we need to store the value 32 (not 31, as we need the zero 154338fd1498Szrj as well), hence six bits. */ 154438fd1498Szrj unsigned align : 6; 154538fd1498Szrj unsigned warn_if_not_align : 6; 154638fd1498Szrj unsigned typeless_storage : 1; 154738fd1498Szrj unsigned empty_flag : 1; 154838fd1498Szrj unsigned spare : 17; 154938fd1498Szrj 155038fd1498Szrj alias_set_type alias_set; 155138fd1498Szrj tree pointer_to; 155238fd1498Szrj tree reference_to; 155338fd1498Szrj union tree_type_symtab { 155438fd1498Szrj int GTY ((tag ("TYPE_SYMTAB_IS_ADDRESS"))) address; 155538fd1498Szrj struct die_struct * GTY ((tag ("TYPE_SYMTAB_IS_DIE"))) die; 155638fd1498Szrj } GTY ((desc ("debug_hooks->tree_type_symtab_field"))) symtab; 155738fd1498Szrj tree canonical; 155838fd1498Szrj tree next_variant; 155938fd1498Szrj tree main_variant; 156038fd1498Szrj tree context; 156138fd1498Szrj tree name; 156238fd1498Szrj }; 156338fd1498Szrj 156438fd1498Szrj struct GTY(()) tree_type_with_lang_specific { 156538fd1498Szrj struct tree_type_common common; 156638fd1498Szrj /* Points to a structure whose details depend on the language in use. */ 156738fd1498Szrj struct lang_type *lang_specific; 156838fd1498Szrj }; 156938fd1498Szrj 157038fd1498Szrj struct GTY(()) tree_type_non_common { 157138fd1498Szrj struct tree_type_with_lang_specific with_lang_specific; 157238fd1498Szrj tree values; 157338fd1498Szrj tree minval; 157438fd1498Szrj tree maxval; 157538fd1498Szrj tree lang_1; 157638fd1498Szrj }; 157738fd1498Szrj 157838fd1498Szrj struct GTY (()) tree_binfo { 157938fd1498Szrj struct tree_common common; 158038fd1498Szrj 158138fd1498Szrj tree offset; 158238fd1498Szrj tree vtable; 158338fd1498Szrj tree virtuals; 158438fd1498Szrj tree vptr_field; 158538fd1498Szrj vec<tree, va_gc> *base_accesses; 158638fd1498Szrj tree inheritance; 158738fd1498Szrj 158838fd1498Szrj tree vtt_subvtt; 158938fd1498Szrj tree vtt_vptr; 159038fd1498Szrj 159138fd1498Szrj vec<tree, va_gc> base_binfos; 159238fd1498Szrj }; 159338fd1498Szrj 159438fd1498Szrj struct GTY(()) tree_decl_minimal { 159538fd1498Szrj struct tree_common common; 159638fd1498Szrj location_t locus; 159738fd1498Szrj unsigned int uid; 159838fd1498Szrj tree name; 159938fd1498Szrj tree context; 160038fd1498Szrj }; 160138fd1498Szrj 160238fd1498Szrj struct GTY(()) tree_decl_common { 160338fd1498Szrj struct tree_decl_minimal common; 160438fd1498Szrj tree size; 160538fd1498Szrj 160638fd1498Szrj ENUM_BITFIELD(machine_mode) mode : 8; 160738fd1498Szrj 160838fd1498Szrj unsigned nonlocal_flag : 1; 160938fd1498Szrj unsigned virtual_flag : 1; 161038fd1498Szrj unsigned ignored_flag : 1; 161138fd1498Szrj unsigned abstract_flag : 1; 161238fd1498Szrj unsigned artificial_flag : 1; 161338fd1498Szrj unsigned preserve_flag: 1; 161438fd1498Szrj unsigned debug_expr_is_from : 1; 161538fd1498Szrj 161638fd1498Szrj unsigned lang_flag_0 : 1; 161738fd1498Szrj unsigned lang_flag_1 : 1; 161838fd1498Szrj unsigned lang_flag_2 : 1; 161938fd1498Szrj unsigned lang_flag_3 : 1; 162038fd1498Szrj unsigned lang_flag_4 : 1; 162138fd1498Szrj unsigned lang_flag_5 : 1; 162238fd1498Szrj unsigned lang_flag_6 : 1; 162338fd1498Szrj unsigned lang_flag_7 : 1; 162438fd1498Szrj unsigned lang_flag_8 : 1; 162538fd1498Szrj 162638fd1498Szrj /* In VAR_DECL and PARM_DECL, this is DECL_REGISTER 162738fd1498Szrj IN TRANSLATION_UNIT_DECL, this is TRANSLATION_UNIT_WARN_EMPTY_P. */ 162838fd1498Szrj unsigned decl_flag_0 : 1; 162938fd1498Szrj /* In FIELD_DECL, this is DECL_BIT_FIELD 163038fd1498Szrj In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL. 163138fd1498Szrj In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG. */ 163238fd1498Szrj unsigned decl_flag_1 : 1; 163338fd1498Szrj /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P 163438fd1498Szrj In VAR_DECL, PARM_DECL and RESULT_DECL, this is 163538fd1498Szrj DECL_HAS_VALUE_EXPR_P. */ 163638fd1498Szrj unsigned decl_flag_2 : 1; 163738fd1498Szrj /* In FIELD_DECL, this is DECL_PADDING_P. */ 163838fd1498Szrj unsigned decl_flag_3 : 1; 163938fd1498Szrj /* Logically, these two would go in a theoretical base shared by var and 164038fd1498Szrj parm decl. */ 164138fd1498Szrj unsigned gimple_reg_flag : 1; 164238fd1498Szrj /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE. */ 164338fd1498Szrj unsigned decl_by_reference_flag : 1; 164438fd1498Szrj /* In a VAR_DECL and PARM_DECL, this is DECL_READ_P. */ 164538fd1498Szrj unsigned decl_read_flag : 1; 164638fd1498Szrj /* In a VAR_DECL or RESULT_DECL, this is DECL_NONSHAREABLE. */ 164738fd1498Szrj unsigned decl_nonshareable_flag : 1; 164838fd1498Szrj 164938fd1498Szrj /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs. */ 165038fd1498Szrj unsigned int off_align : 6; 165138fd1498Szrj 165238fd1498Szrj /* DECL_ALIGN. It should have the same size as TYPE_ALIGN. */ 165338fd1498Szrj unsigned int align : 6; 165438fd1498Szrj 165538fd1498Szrj /* DECL_WARN_IF_NOT_ALIGN. It should have the same size as 165638fd1498Szrj TYPE_WARN_IF_NOT_ALIGN. */ 165738fd1498Szrj unsigned int warn_if_not_align : 6; 165838fd1498Szrj 165938fd1498Szrj /* 14 bits unused. */ 166038fd1498Szrj 166138fd1498Szrj /* UID for points-to sets, stable over copying from inlining. */ 166238fd1498Szrj unsigned int pt_uid; 166338fd1498Szrj 166438fd1498Szrj tree size_unit; 166538fd1498Szrj tree initial; 166638fd1498Szrj tree attributes; 166738fd1498Szrj tree abstract_origin; 166838fd1498Szrj 166938fd1498Szrj /* Points to a structure whose details depend on the language in use. */ 167038fd1498Szrj struct lang_decl *lang_specific; 167138fd1498Szrj }; 167238fd1498Szrj 167338fd1498Szrj struct GTY(()) tree_decl_with_rtl { 167438fd1498Szrj struct tree_decl_common common; 167538fd1498Szrj rtx rtl; 167638fd1498Szrj }; 167738fd1498Szrj 167838fd1498Szrj struct GTY(()) tree_field_decl { 167938fd1498Szrj struct tree_decl_common common; 168038fd1498Szrj 168138fd1498Szrj tree offset; 168238fd1498Szrj tree bit_field_type; 168338fd1498Szrj tree qualifier; 168438fd1498Szrj tree bit_offset; 168538fd1498Szrj tree fcontext; 168638fd1498Szrj }; 168738fd1498Szrj 168838fd1498Szrj struct GTY(()) tree_label_decl { 168938fd1498Szrj struct tree_decl_with_rtl common; 169038fd1498Szrj int label_decl_uid; 169138fd1498Szrj int eh_landing_pad_nr; 169238fd1498Szrj }; 169338fd1498Szrj 169438fd1498Szrj struct GTY(()) tree_result_decl { 169538fd1498Szrj struct tree_decl_with_rtl common; 169638fd1498Szrj }; 169738fd1498Szrj 169838fd1498Szrj struct GTY(()) tree_const_decl { 169938fd1498Szrj struct tree_decl_common common; 170038fd1498Szrj }; 170138fd1498Szrj 170238fd1498Szrj struct GTY(()) tree_parm_decl { 170338fd1498Szrj struct tree_decl_with_rtl common; 170438fd1498Szrj rtx incoming_rtl; 170538fd1498Szrj }; 170638fd1498Szrj 170738fd1498Szrj struct GTY(()) tree_decl_with_vis { 170838fd1498Szrj struct tree_decl_with_rtl common; 170938fd1498Szrj tree assembler_name; 171038fd1498Szrj struct symtab_node *symtab_node; 171138fd1498Szrj 171238fd1498Szrj /* Belong to VAR_DECL exclusively. */ 171338fd1498Szrj unsigned defer_output : 1; 171438fd1498Szrj unsigned hard_register : 1; 171538fd1498Szrj unsigned common_flag : 1; 171638fd1498Szrj unsigned in_text_section : 1; 171738fd1498Szrj unsigned in_constant_pool : 1; 171838fd1498Szrj unsigned dllimport_flag : 1; 171938fd1498Szrj /* Don't belong to VAR_DECL exclusively. */ 172038fd1498Szrj unsigned weak_flag : 1; 172138fd1498Szrj 172238fd1498Szrj unsigned seen_in_bind_expr : 1; 172338fd1498Szrj unsigned comdat_flag : 1; 172438fd1498Szrj /* Used for FUNCTION_DECL, VAR_DECL and in C++ for TYPE_DECL. */ 172538fd1498Szrj ENUM_BITFIELD(symbol_visibility) visibility : 2; 172638fd1498Szrj unsigned visibility_specified : 1; 172738fd1498Szrj 172838fd1498Szrj /* Belong to FUNCTION_DECL exclusively. */ 172938fd1498Szrj unsigned init_priority_p : 1; 173038fd1498Szrj /* Used by C++ only. Might become a generic decl flag. */ 173138fd1498Szrj unsigned shadowed_for_var_p : 1; 173238fd1498Szrj /* Belong to FUNCTION_DECL exclusively. */ 173338fd1498Szrj unsigned cxx_constructor : 1; 173438fd1498Szrj /* Belong to FUNCTION_DECL exclusively. */ 173538fd1498Szrj unsigned cxx_destructor : 1; 173638fd1498Szrj /* Belong to FUNCTION_DECL exclusively. */ 173738fd1498Szrj unsigned final : 1; 173838fd1498Szrj /* Belong to FUNCTION_DECL exclusively. */ 173938fd1498Szrj unsigned regdecl_flag : 1; 174038fd1498Szrj /* 14 unused bits. */ 174138fd1498Szrj }; 174238fd1498Szrj 174338fd1498Szrj struct GTY(()) tree_var_decl { 174438fd1498Szrj struct tree_decl_with_vis common; 174538fd1498Szrj }; 174638fd1498Szrj 174738fd1498Szrj struct GTY(()) tree_decl_non_common { 174838fd1498Szrj struct tree_decl_with_vis common; 174938fd1498Szrj /* Almost all FE's use this. */ 175038fd1498Szrj tree result; 175138fd1498Szrj }; 175238fd1498Szrj 175338fd1498Szrj /* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the 175438fd1498Szrj arguments/result/saved_tree fields by front ends. It was either inherit 175538fd1498Szrj FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL, 175638fd1498Szrj which seemed a bit strange. */ 175738fd1498Szrj 175838fd1498Szrj struct GTY(()) tree_function_decl { 175938fd1498Szrj struct tree_decl_non_common common; 176038fd1498Szrj 176138fd1498Szrj struct function *f; 176238fd1498Szrj 176338fd1498Szrj /* Arguments of the function. */ 176438fd1498Szrj tree arguments; 176538fd1498Szrj /* The personality function. Used for stack unwinding. */ 176638fd1498Szrj tree personality; 176738fd1498Szrj 176838fd1498Szrj /* Function specific options that are used by this function. */ 176938fd1498Szrj tree function_specific_target; /* target options */ 177038fd1498Szrj tree function_specific_optimization; /* optimization options */ 177138fd1498Szrj 177238fd1498Szrj /* Generic function body. */ 177338fd1498Szrj tree saved_tree; 177438fd1498Szrj /* Index within a virtual table. */ 177538fd1498Szrj tree vindex; 177638fd1498Szrj 177738fd1498Szrj /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is 177838fd1498Szrj DECL_FUNCTION_CODE. Otherwise unused. 177938fd1498Szrj ??? The bitfield needs to be able to hold all target function 178038fd1498Szrj codes as well. */ 178138fd1498Szrj ENUM_BITFIELD(built_in_function) function_code : 12; 178238fd1498Szrj ENUM_BITFIELD(built_in_class) built_in_class : 2; 178338fd1498Szrj 178438fd1498Szrj unsigned static_ctor_flag : 1; 178538fd1498Szrj unsigned static_dtor_flag : 1; 178638fd1498Szrj 178738fd1498Szrj unsigned uninlinable : 1; 178838fd1498Szrj unsigned possibly_inlined : 1; 178938fd1498Szrj unsigned novops_flag : 1; 179038fd1498Szrj unsigned returns_twice_flag : 1; 179138fd1498Szrj unsigned malloc_flag : 1; 179238fd1498Szrj unsigned operator_new_flag : 1; 179338fd1498Szrj unsigned declared_inline_flag : 1; 179438fd1498Szrj unsigned no_inline_warning_flag : 1; 179538fd1498Szrj 179638fd1498Szrj unsigned no_instrument_function_entry_exit : 1; 179738fd1498Szrj unsigned no_limit_stack : 1; 179838fd1498Szrj unsigned disregard_inline_limits : 1; 179938fd1498Szrj unsigned pure_flag : 1; 180038fd1498Szrj unsigned looping_const_or_pure_flag : 1; 180138fd1498Szrj unsigned has_debug_args_flag : 1; 180238fd1498Szrj unsigned versioned_function : 1; 1803*58e805e6Szrj unsigned lambda_function: 1; 180438fd1498Szrj /* No bits left. */ 180538fd1498Szrj }; 180638fd1498Szrj 180738fd1498Szrj struct GTY(()) tree_translation_unit_decl { 180838fd1498Szrj struct tree_decl_common common; 180938fd1498Szrj /* Source language of this translation unit. Used for DWARF output. */ 181038fd1498Szrj const char * GTY((skip(""))) language; 181138fd1498Szrj /* TODO: Non-optimization used to build this translation unit. */ 181238fd1498Szrj /* TODO: Root of a partial DWARF tree for global types and decls. */ 181338fd1498Szrj }; 181438fd1498Szrj 181538fd1498Szrj struct GTY(()) tree_type_decl { 181638fd1498Szrj struct tree_decl_non_common common; 181738fd1498Szrj 181838fd1498Szrj }; 181938fd1498Szrj 182038fd1498Szrj struct GTY ((chain_next ("%h.next"), chain_prev ("%h.prev"))) tree_statement_list_node 182138fd1498Szrj { 182238fd1498Szrj struct tree_statement_list_node *prev; 182338fd1498Szrj struct tree_statement_list_node *next; 182438fd1498Szrj tree stmt; 182538fd1498Szrj }; 182638fd1498Szrj 182738fd1498Szrj struct GTY(()) tree_statement_list 182838fd1498Szrj { 182938fd1498Szrj struct tree_typed typed; 183038fd1498Szrj struct tree_statement_list_node *head; 183138fd1498Szrj struct tree_statement_list_node *tail; 183238fd1498Szrj }; 183338fd1498Szrj 183438fd1498Szrj 183538fd1498Szrj /* Optimization options used by a function. */ 183638fd1498Szrj 183738fd1498Szrj struct GTY(()) tree_optimization_option { 183838fd1498Szrj struct tree_base base; 183938fd1498Szrj 184038fd1498Szrj /* The optimization options used by the user. */ 184138fd1498Szrj struct cl_optimization *opts; 184238fd1498Szrj 184338fd1498Szrj /* Target optabs for this set of optimization options. This is of 184438fd1498Szrj type `struct target_optabs *'. */ 184538fd1498Szrj void *GTY ((atomic)) optabs; 184638fd1498Szrj 184738fd1498Szrj /* The value of this_target_optabs against which the optabs above were 184838fd1498Szrj generated. */ 184938fd1498Szrj struct target_optabs *GTY ((skip)) base_optabs; 185038fd1498Szrj }; 185138fd1498Szrj 185238fd1498Szrj /* Forward declaration, defined in target-globals.h. */ 185338fd1498Szrj 185438fd1498Szrj struct GTY(()) target_globals; 185538fd1498Szrj 185638fd1498Szrj /* Target options used by a function. */ 185738fd1498Szrj 185838fd1498Szrj struct GTY(()) tree_target_option { 185938fd1498Szrj struct tree_base base; 186038fd1498Szrj 186138fd1498Szrj /* Target globals for the corresponding target option. */ 186238fd1498Szrj struct target_globals *globals; 186338fd1498Szrj 186438fd1498Szrj /* The optimization options used by the user. */ 186538fd1498Szrj struct cl_target_option *opts; 186638fd1498Szrj }; 186738fd1498Szrj 186838fd1498Szrj /* Define the overall contents of a tree node. 186938fd1498Szrj It may be any of the structures declared above 187038fd1498Szrj for various types of node. */ 187138fd1498Szrj union GTY ((ptr_alias (union lang_tree_node), 187238fd1498Szrj desc ("tree_node_structure (&%h)"), variable_size)) tree_node { 187338fd1498Szrj struct tree_base GTY ((tag ("TS_BASE"))) base; 187438fd1498Szrj struct tree_typed GTY ((tag ("TS_TYPED"))) typed; 187538fd1498Szrj struct tree_common GTY ((tag ("TS_COMMON"))) common; 187638fd1498Szrj struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst; 187738fd1498Szrj struct tree_poly_int_cst GTY ((tag ("TS_POLY_INT_CST"))) poly_int_cst; 187838fd1498Szrj struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst; 187938fd1498Szrj struct tree_fixed_cst GTY ((tag ("TS_FIXED_CST"))) fixed_cst; 188038fd1498Szrj struct tree_vector GTY ((tag ("TS_VECTOR"))) vector; 188138fd1498Szrj struct tree_string GTY ((tag ("TS_STRING"))) string; 188238fd1498Szrj struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex; 188338fd1498Szrj struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier; 188438fd1498Szrj struct tree_decl_minimal GTY((tag ("TS_DECL_MINIMAL"))) decl_minimal; 188538fd1498Szrj struct tree_decl_common GTY ((tag ("TS_DECL_COMMON"))) decl_common; 188638fd1498Szrj struct tree_decl_with_rtl GTY ((tag ("TS_DECL_WRTL"))) decl_with_rtl; 188738fd1498Szrj struct tree_decl_non_common GTY ((tag ("TS_DECL_NON_COMMON"))) 188838fd1498Szrj decl_non_common; 188938fd1498Szrj struct tree_parm_decl GTY ((tag ("TS_PARM_DECL"))) parm_decl; 189038fd1498Szrj struct tree_decl_with_vis GTY ((tag ("TS_DECL_WITH_VIS"))) decl_with_vis; 189138fd1498Szrj struct tree_var_decl GTY ((tag ("TS_VAR_DECL"))) var_decl; 189238fd1498Szrj struct tree_field_decl GTY ((tag ("TS_FIELD_DECL"))) field_decl; 189338fd1498Szrj struct tree_label_decl GTY ((tag ("TS_LABEL_DECL"))) label_decl; 189438fd1498Szrj struct tree_result_decl GTY ((tag ("TS_RESULT_DECL"))) result_decl; 189538fd1498Szrj struct tree_const_decl GTY ((tag ("TS_CONST_DECL"))) const_decl; 189638fd1498Szrj struct tree_type_decl GTY ((tag ("TS_TYPE_DECL"))) type_decl; 189738fd1498Szrj struct tree_function_decl GTY ((tag ("TS_FUNCTION_DECL"))) function_decl; 189838fd1498Szrj struct tree_translation_unit_decl GTY ((tag ("TS_TRANSLATION_UNIT_DECL"))) 189938fd1498Szrj translation_unit_decl; 190038fd1498Szrj struct tree_type_common GTY ((tag ("TS_TYPE_COMMON"))) type_common; 190138fd1498Szrj struct tree_type_with_lang_specific GTY ((tag ("TS_TYPE_WITH_LANG_SPECIFIC"))) 190238fd1498Szrj type_with_lang_specific; 190338fd1498Szrj struct tree_type_non_common GTY ((tag ("TS_TYPE_NON_COMMON"))) 190438fd1498Szrj type_non_common; 190538fd1498Szrj struct tree_list GTY ((tag ("TS_LIST"))) list; 190638fd1498Szrj struct tree_vec GTY ((tag ("TS_VEC"))) vec; 190738fd1498Szrj struct tree_exp GTY ((tag ("TS_EXP"))) exp; 190838fd1498Szrj struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name; 190938fd1498Szrj struct tree_block GTY ((tag ("TS_BLOCK"))) block; 191038fd1498Szrj struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo; 191138fd1498Szrj struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list; 191238fd1498Szrj struct tree_constructor GTY ((tag ("TS_CONSTRUCTOR"))) constructor; 191338fd1498Szrj struct tree_omp_clause GTY ((tag ("TS_OMP_CLAUSE"))) omp_clause; 191438fd1498Szrj struct tree_optimization_option GTY ((tag ("TS_OPTIMIZATION"))) optimization; 191538fd1498Szrj struct tree_target_option GTY ((tag ("TS_TARGET_OPTION"))) target_option; 191638fd1498Szrj }; 191738fd1498Szrj 191838fd1498Szrj /* Structure describing an attribute and a function to handle it. */ 191938fd1498Szrj struct attribute_spec { 192038fd1498Szrj /* The name of the attribute (without any leading or trailing __), 192138fd1498Szrj or NULL to mark the end of a table of attributes. */ 192238fd1498Szrj const char *name; 192338fd1498Szrj /* The minimum length of the list of arguments of the attribute. */ 192438fd1498Szrj int min_length; 192538fd1498Szrj /* The maximum length of the list of arguments of the attribute 192638fd1498Szrj (-1 for no maximum). */ 192738fd1498Szrj int max_length; 192838fd1498Szrj /* Whether this attribute requires a DECL. If it does, it will be passed 192938fd1498Szrj from types of DECLs, function return types and array element types to 193038fd1498Szrj the DECLs, function types and array types respectively; but when 193138fd1498Szrj applied to a type in any other circumstances, it will be ignored with 193238fd1498Szrj a warning. (If greater control is desired for a given attribute, 193338fd1498Szrj this should be false, and the flags argument to the handler may be 193438fd1498Szrj used to gain greater control in that case.) */ 193538fd1498Szrj bool decl_required; 193638fd1498Szrj /* Whether this attribute requires a type. If it does, it will be passed 193738fd1498Szrj from a DECL to the type of that DECL. */ 193838fd1498Szrj bool type_required; 193938fd1498Szrj /* Whether this attribute requires a function (or method) type. If it does, 194038fd1498Szrj it will be passed from a function pointer type to the target type, 194138fd1498Szrj and from a function return type (which is not itself a function 194238fd1498Szrj pointer type) to the function type. */ 194338fd1498Szrj bool function_type_required; 194438fd1498Szrj /* Specifies if attribute affects type's identity. */ 194538fd1498Szrj bool affects_type_identity; 194638fd1498Szrj /* Function to handle this attribute. NODE points to the node to which 194738fd1498Szrj the attribute is to be applied. If a DECL, it should be modified in 194838fd1498Szrj place; if a TYPE, a copy should be created. NAME is the name of the 194938fd1498Szrj attribute (possibly with leading or trailing __). ARGS is the TREE_LIST 195038fd1498Szrj of the arguments (which may be NULL). FLAGS gives further information 195138fd1498Szrj about the context of the attribute. Afterwards, the attributes will 195238fd1498Szrj be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as appropriate, 195338fd1498Szrj unless *NO_ADD_ATTRS is set to true (which should be done on error, 195438fd1498Szrj as well as in any other cases when the attributes should not be added 195538fd1498Szrj to the DECL or TYPE). Depending on FLAGS, any attributes to be 195638fd1498Szrj applied to another type or DECL later may be returned; 195738fd1498Szrj otherwise the return value should be NULL_TREE. This pointer may be 195838fd1498Szrj NULL if no special handling is required beyond the checks implied 195938fd1498Szrj by the rest of this structure. */ 196038fd1498Szrj tree (*handler) (tree *node, tree name, tree args, 196138fd1498Szrj int flags, bool *no_add_attrs); 196238fd1498Szrj 196338fd1498Szrj /* Specifies the name of an attribute that's mutually exclusive with 196438fd1498Szrj this one, and whether the relationship applies to the function, 196538fd1498Szrj variable, or type form of the attribute. */ 196638fd1498Szrj struct exclusions { 196738fd1498Szrj const char *name; 196838fd1498Szrj bool function; 196938fd1498Szrj bool variable; 197038fd1498Szrj bool type; 197138fd1498Szrj }; 197238fd1498Szrj 197338fd1498Szrj /* An array of attribute exclusions describing names of other attributes 197438fd1498Szrj that this attribute is mutually exclusive with. */ 197538fd1498Szrj const exclusions *exclude; 197638fd1498Szrj }; 197738fd1498Szrj 197838fd1498Szrj /* These functions allow a front-end to perform a manual layout of a 197938fd1498Szrj RECORD_TYPE. (For instance, if the placement of subsequent fields 198038fd1498Szrj depends on the placement of fields so far.) Begin by calling 198138fd1498Szrj start_record_layout. Then, call place_field for each of the 198238fd1498Szrj fields. Then, call finish_record_layout. See layout_type for the 198338fd1498Szrj default way in which these functions are used. */ 198438fd1498Szrj typedef struct record_layout_info_s { 198538fd1498Szrj /* The RECORD_TYPE that we are laying out. */ 198638fd1498Szrj tree t; 198738fd1498Szrj /* The offset into the record so far, in bytes, not including bits in 198838fd1498Szrj BITPOS. */ 198938fd1498Szrj tree offset; 199038fd1498Szrj /* The last known alignment of SIZE. */ 199138fd1498Szrj unsigned int offset_align; 199238fd1498Szrj /* The bit position within the last OFFSET_ALIGN bits, in bits. */ 199338fd1498Szrj tree bitpos; 199438fd1498Szrj /* The alignment of the record so far, in bits. */ 199538fd1498Szrj unsigned int record_align; 199638fd1498Szrj /* The alignment of the record so far, ignoring #pragma pack and 199738fd1498Szrj __attribute__ ((packed)), in bits. */ 199838fd1498Szrj unsigned int unpacked_align; 199938fd1498Szrj /* The previous field laid out. */ 200038fd1498Szrj tree prev_field; 200138fd1498Szrj /* The static variables (i.e., class variables, as opposed to 200238fd1498Szrj instance variables) encountered in T. */ 200338fd1498Szrj vec<tree, va_gc> *pending_statics; 200438fd1498Szrj /* Bits remaining in the current alignment group */ 200538fd1498Szrj int remaining_in_alignment; 200638fd1498Szrj /* True if we've seen a packed field that didn't have normal 200738fd1498Szrj alignment anyway. */ 200838fd1498Szrj int packed_maybe_necessary; 200938fd1498Szrj } *record_layout_info; 201038fd1498Szrj 201138fd1498Szrj /* Iterator for going through the function arguments. */ 201238fd1498Szrj struct function_args_iterator { 201338fd1498Szrj tree next; /* TREE_LIST pointing to the next argument */ 201438fd1498Szrj }; 201538fd1498Szrj 201638fd1498Szrj /* Structures to map from a tree to another tree. */ 201738fd1498Szrj struct GTY(()) tree_map_base { 201838fd1498Szrj tree from; 201938fd1498Szrj }; 202038fd1498Szrj 202138fd1498Szrj /* Map from a tree to another tree. */ 202238fd1498Szrj 202338fd1498Szrj struct GTY((for_user)) tree_map { 202438fd1498Szrj struct tree_map_base base; 202538fd1498Szrj unsigned int hash; 202638fd1498Szrj tree to; 202738fd1498Szrj }; 202838fd1498Szrj 202938fd1498Szrj /* Map from a decl tree to another tree. */ 203038fd1498Szrj struct GTY((for_user)) tree_decl_map { 203138fd1498Szrj struct tree_map_base base; 203238fd1498Szrj tree to; 203338fd1498Szrj }; 203438fd1498Szrj 203538fd1498Szrj /* Map from a tree to an int. */ 203638fd1498Szrj struct GTY((for_user)) tree_int_map { 203738fd1498Szrj struct tree_map_base base; 203838fd1498Szrj unsigned int to; 203938fd1498Szrj }; 204038fd1498Szrj 204138fd1498Szrj /* Map from a decl tree to a tree vector. */ 204238fd1498Szrj struct GTY((for_user)) tree_vec_map { 204338fd1498Szrj struct tree_map_base base; 204438fd1498Szrj vec<tree, va_gc> *to; 204538fd1498Szrj }; 204638fd1498Szrj 204738fd1498Szrj /* Abstract iterators for CALL_EXPRs. These static inline definitions 204838fd1498Szrj have to go towards the end of tree.h so that union tree_node is fully 204938fd1498Szrj defined by this point. */ 205038fd1498Szrj 205138fd1498Szrj /* Structure containing iterator state. */ 205238fd1498Szrj struct call_expr_arg_iterator { 205338fd1498Szrj tree t; /* the call_expr */ 205438fd1498Szrj int n; /* argument count */ 205538fd1498Szrj int i; /* next argument index */ 205638fd1498Szrj }; 205738fd1498Szrj 205838fd1498Szrj struct const_call_expr_arg_iterator { 205938fd1498Szrj const_tree t; /* the call_expr */ 206038fd1498Szrj int n; /* argument count */ 206138fd1498Szrj int i; /* next argument index */ 206238fd1498Szrj }; 206338fd1498Szrj 206438fd1498Szrj /* The builtin_info structure holds the FUNCTION_DECL of the standard builtin 206538fd1498Szrj function, and flags. */ 206638fd1498Szrj struct GTY(()) builtin_info_type { 206738fd1498Szrj tree decl; 206838fd1498Szrj /* Whether the user can use <xxx> instead of explicitly using calls 206938fd1498Szrj to __builtin_<xxx>. */ 207038fd1498Szrj unsigned implicit_p : 1; 207138fd1498Szrj /* Whether the user has provided a declaration of <xxx>. */ 207238fd1498Szrj unsigned declared_p : 1; 207338fd1498Szrj }; 207438fd1498Szrj 207538fd1498Szrj /* Information about a _FloatN or _FloatNx type that may be 207638fd1498Szrj supported. */ 207738fd1498Szrj struct floatn_type_info { 207838fd1498Szrj /* The number N in the type name. */ 207938fd1498Szrj int n; 208038fd1498Szrj /* Whether it is an extended type _FloatNx (true) or an interchange 208138fd1498Szrj type (false). */ 208238fd1498Szrj bool extended; 208338fd1498Szrj }; 208438fd1498Szrj 208538fd1498Szrj 208638fd1498Szrj /*--------------------------------------------------------------------------- 208738fd1498Szrj Global variables 208838fd1498Szrj ---------------------------------------------------------------------------*/ 208938fd1498Szrj /* Matrix describing the structures contained in a given tree code. */ 209038fd1498Szrj extern bool tree_contains_struct[MAX_TREE_CODES][64]; 209138fd1498Szrj 209238fd1498Szrj /* Class of tree given its code. */ 209338fd1498Szrj extern const enum tree_code_class tree_code_type[]; 209438fd1498Szrj 209538fd1498Szrj /* Each tree code class has an associated string representation. 209638fd1498Szrj These must correspond to the tree_code_class entries. */ 209738fd1498Szrj extern const char *const tree_code_class_strings[]; 209838fd1498Szrj 209938fd1498Szrj /* Number of argument-words in each kind of tree-node. */ 210038fd1498Szrj extern const unsigned char tree_code_length[]; 210138fd1498Szrj 210238fd1498Szrj /* Vector of all alias pairs for global symbols. */ 210338fd1498Szrj extern GTY(()) vec<alias_pair, va_gc> *alias_pairs; 210438fd1498Szrj 210538fd1498Szrj /* Names of all the built_in classes. */ 210638fd1498Szrj extern const char *const built_in_class_names[BUILT_IN_LAST]; 210738fd1498Szrj 210838fd1498Szrj /* Names of all the built_in functions. */ 210938fd1498Szrj extern const char * built_in_names[(int) END_BUILTINS]; 211038fd1498Szrj 211138fd1498Szrj /* Number of operands and names for each OMP_CLAUSE node. */ 211238fd1498Szrj extern unsigned const char omp_clause_num_ops[]; 211338fd1498Szrj extern const char * const omp_clause_code_name[]; 211438fd1498Szrj 211538fd1498Szrj /* A vector of all translation-units. */ 211638fd1498Szrj extern GTY (()) vec<tree, va_gc> *all_translation_units; 211738fd1498Szrj 211838fd1498Szrj /* Vector of standard trees used by the C compiler. */ 211938fd1498Szrj extern GTY(()) tree global_trees[TI_MAX]; 212038fd1498Szrj 212138fd1498Szrj /* The standard C integer types. Use integer_type_kind to index into 212238fd1498Szrj this array. */ 212338fd1498Szrj extern GTY(()) tree integer_types[itk_none]; 212438fd1498Szrj 212538fd1498Szrj /* Types used to represent sizes. */ 212638fd1498Szrj extern GTY(()) tree sizetype_tab[(int) stk_type_kind_last]; 212738fd1498Szrj 212838fd1498Szrj /* Arrays for keeping track of tree node statistics. */ 212938fd1498Szrj extern uint64_t tree_node_counts[]; 213038fd1498Szrj extern uint64_t tree_node_sizes[]; 213138fd1498Szrj 213238fd1498Szrj /* True if we are in gimple form and the actions of the folders need to 213338fd1498Szrj be restricted. False if we are not in gimple form and folding is not 213438fd1498Szrj restricted to creating gimple expressions. */ 213538fd1498Szrj extern bool in_gimple_form; 213638fd1498Szrj 213738fd1498Szrj /* Functional interface to the builtin functions. */ 213838fd1498Szrj extern GTY(()) builtin_info_type builtin_info[(int)END_BUILTINS]; 213938fd1498Szrj 214038fd1498Szrj /* If nonzero, an upper limit on alignment of structure fields, in bits, */ 214138fd1498Szrj extern unsigned int maximum_field_alignment; 214238fd1498Szrj 214338fd1498Szrj /* Points to the FUNCTION_DECL of the function whose body we are reading. */ 214438fd1498Szrj extern GTY(()) tree current_function_decl; 214538fd1498Szrj 214638fd1498Szrj /* Nonzero means a FUNC_BEGIN label was emitted. */ 214738fd1498Szrj extern GTY(()) const char * current_function_func_begin_label; 214838fd1498Szrj 214938fd1498Szrj /* Information about the _FloatN and _FloatNx types. */ 215038fd1498Szrj extern const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES]; 215138fd1498Szrj 215238fd1498Szrj #endif // GCC_TREE_CORE_H 2153