LCOV - code coverage report
Current view: top level - gcc - tree.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 91.5 % 645 590
Test Date: 2024-04-20 14:03:02 Functions: 98.0 % 152 149
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : /* Definitions for the ubiquitous 'tree' type for GNU compilers.
       2                 :             :    Copyright (C) 1989-2024 Free Software Foundation, Inc.
       3                 :             : 
       4                 :             : This file is part of GCC.
       5                 :             : 
       6                 :             : GCC is free software; you can redistribute it and/or modify it under
       7                 :             : the terms of the GNU General Public License as published by the Free
       8                 :             : Software Foundation; either version 3, or (at your option) any later
       9                 :             : version.
      10                 :             : 
      11                 :             : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      12                 :             : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      13                 :             : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      14                 :             : for more details.
      15                 :             : 
      16                 :             : You should have received a copy of the GNU General Public License
      17                 :             : along with GCC; see the file COPYING3.  If not see
      18                 :             : <http://www.gnu.org/licenses/>.  */
      19                 :             : 
      20                 :             : #ifndef GCC_TREE_H
      21                 :             : #define GCC_TREE_H
      22                 :             : 
      23                 :             : #include "tree-core.h"
      24                 :             : #include "options.h"
      25                 :             : 
      26                 :             : /* Convert a target-independent built-in function code to a combined_fn.  */
      27                 :             : 
      28                 :             : inline combined_fn
      29                 :             : as_combined_fn (built_in_function fn)
      30                 :             : {
      31                 :             :   return combined_fn (int (fn));
      32                 :             : }
      33                 :             : 
      34                 :             : /* Convert an internal function code to a combined_fn.  */
      35                 :             : 
      36                 :             : inline combined_fn
      37                 :    59443242 : as_combined_fn (internal_fn fn)
      38                 :             : {
      39                 :    59250165 :   return combined_fn (int (fn) + int (END_BUILTINS));
      40                 :             : }
      41                 :             : 
      42                 :             : /* Return true if CODE is a target-independent built-in function.  */
      43                 :             : 
      44                 :             : inline bool
      45                 :        4149 : builtin_fn_p (combined_fn code)
      46                 :             : {
      47                 :        4149 :   return int (code) < int (END_BUILTINS);
      48                 :             : }
      49                 :             : 
      50                 :             : /* Return the target-independent built-in function represented by CODE.
      51                 :             :    Only valid if builtin_fn_p (CODE).  */
      52                 :             : 
      53                 :             : inline built_in_function
      54                 :             : as_builtin_fn (combined_fn code)
      55                 :             : {
      56                 :    13234573 :   gcc_checking_assert (builtin_fn_p (code));
      57                 :             :   return built_in_function (int (code));
      58                 :             : }
      59                 :             : 
      60                 :             : /* Return true if CODE is an internal function.  */
      61                 :             : 
      62                 :             : inline bool
      63                 :    51040621 : internal_fn_p (combined_fn code)
      64                 :             : {
      65                 :    33343877 :   return int (code) >= int (END_BUILTINS);
      66                 :             : }
      67                 :             : 
      68                 :             : /* Return the internal function represented by CODE.  Only valid if
      69                 :             :    internal_fn_p (CODE).  */
      70                 :             : 
      71                 :             : inline internal_fn
      72                 :    20149898 : as_internal_fn (combined_fn code)
      73                 :             : {
      74                 :    20155677 :   gcc_checking_assert (internal_fn_p (code));
      75                 :    20149898 :   return internal_fn (int (code) - int (END_BUILTINS));
      76                 :             : }
      77                 :             : 
      78                 :             : /* Helper to transparently allow tree codes and builtin function codes
      79                 :             :    exist in one storage entity.  */
      80                 :             : class code_helper
      81                 :             : {
      82                 :             : public:
      83                 :  1247631313 :   code_helper () {}
      84                 :  2757638064 :   code_helper (tree_code code) : rep ((int) code) {}
      85                 :    30029344 :   code_helper (combined_fn fn) : rep (-(int) fn) {}
      86                 :    50811026 :   code_helper (internal_fn fn) : rep (-(int) as_combined_fn (fn)) {}
      87                 :   270638949 :   explicit operator tree_code () const { return (tree_code) rep; }
      88                 :    11260402 :   explicit operator combined_fn () const { return (combined_fn) -rep; }
      89                 :             :   explicit operator internal_fn () const;
      90                 :             :   explicit operator built_in_function () const;
      91                 :   781305608 :   bool is_tree_code () const { return rep > 0; }
      92                 :     1620658 :   bool is_fn_code () const { return rep < 0; }
      93                 :             :   bool is_internal_fn () const;
      94                 :             :   bool is_builtin_fn () const;
      95                 :   588933681 :   int get_rep () const { return rep; }
      96                 :             :   tree_code safe_as_tree_code () const;
      97                 :             :   combined_fn safe_as_fn_code () const;
      98                 :             :   bool operator== (const code_helper &other) { return rep == other.rep; }
      99                 :    77499459 :   bool operator!= (const code_helper &other) { return rep != other.rep; }
     100                 :    64061395 :   bool operator== (tree_code c) { return rep == code_helper (c).rep; }
     101                 :    96440043 :   bool operator!= (tree_code c) { return rep != code_helper (c).rep; }
     102                 :             : 
     103                 :             : private:
     104                 :             :   int rep;
     105                 :             : };
     106                 :             : 
     107                 :             : /* Helper function that returns the tree_code representation of THIS
     108                 :             :    code_helper if it is a tree_code and MAX_TREE_CODES otherwise.  This is
     109                 :             :    useful when passing a code_helper to a tree_code only check.  */
     110                 :             : 
     111                 :             : inline tree_code
     112                 :      678201 : code_helper::safe_as_tree_code () const
     113                 :             : {
     114                 :      810333 :   return is_tree_code () ? (tree_code) *this : MAX_TREE_CODES;
     115                 :             : }
     116                 :             : 
     117                 :             : /* Helper function that returns the combined_fn representation of THIS
     118                 :             :    code_helper if it is a fn_code and CFN_LAST otherwise.  This is useful when
     119                 :             :    passing a code_helper to a combined_fn only check.  */
     120                 :             : 
     121                 :             : inline combined_fn
     122                 :             : code_helper::safe_as_fn_code () const {
     123                 :             :   return is_fn_code () ? (combined_fn) *this : CFN_LAST;
     124                 :             : }
     125                 :             : 
     126                 :     2291165 : inline code_helper::operator internal_fn () const
     127                 :             : {
     128                 :     2291165 :   return as_internal_fn (combined_fn (*this));
     129                 :             : }
     130                 :             : 
     131                 :             : inline code_helper::operator built_in_function () const
     132                 :             : {
     133                 :             :   return as_builtin_fn (combined_fn (*this));
     134                 :             : }
     135                 :             : 
     136                 :             : inline bool
     137                 :   561942922 : code_helper::is_internal_fn () const
     138                 :             : {
     139                 :   561940804 :   return is_fn_code () && internal_fn_p (combined_fn (*this));
     140                 :             : }
     141                 :             : 
     142                 :             : inline bool
     143                 :             : code_helper::is_builtin_fn () const
     144                 :             : {
     145                 :             :   return is_fn_code () && builtin_fn_p (combined_fn (*this));
     146                 :             : }
     147                 :             : 
     148                 :             : /* Macros for initializing `tree_contains_struct'.  */
     149                 :             : #define MARK_TS_BASE(C)                                 \
     150                 :             :   (tree_contains_struct[C][TS_BASE] = true)
     151                 :             : 
     152                 :             : #define MARK_TS_TYPED(C)                                \
     153                 :             :   (MARK_TS_BASE (C),                                    \
     154                 :             :    tree_contains_struct[C][TS_TYPED] = true)
     155                 :             : 
     156                 :             : #define MARK_TS_COMMON(C)                               \
     157                 :             :   (MARK_TS_TYPED (C),                                   \
     158                 :             :    tree_contains_struct[C][TS_COMMON] = true)
     159                 :             : 
     160                 :             : #define MARK_TS_TYPE_COMMON(C)                          \
     161                 :             :   (MARK_TS_COMMON (C),                                  \
     162                 :             :    tree_contains_struct[C][TS_TYPE_COMMON] = true)
     163                 :             : 
     164                 :             : #define MARK_TS_TYPE_WITH_LANG_SPECIFIC(C)              \
     165                 :             :   (MARK_TS_TYPE_COMMON (C),                             \
     166                 :             :    tree_contains_struct[C][TS_TYPE_WITH_LANG_SPECIFIC] = true)
     167                 :             : 
     168                 :             : #define MARK_TS_TYPE_NON_COMMON(C)                      \
     169                 :             :   (MARK_TS_TYPE_WITH_LANG_SPECIFIC (C),                 \
     170                 :             :    tree_contains_struct[C][TS_TYPE_NON_COMMON] = true)  \
     171                 :             : 
     172                 :             : #define MARK_TS_DECL_MINIMAL(C)                         \
     173                 :             :   (MARK_TS_COMMON (C),                                  \
     174                 :             :    tree_contains_struct[C][TS_DECL_MINIMAL] = true)
     175                 :             : 
     176                 :             : #define MARK_TS_DECL_COMMON(C)                          \
     177                 :             :   (MARK_TS_DECL_MINIMAL (C),                            \
     178                 :             :    tree_contains_struct[C][TS_DECL_COMMON] = true)
     179                 :             : 
     180                 :             : #define MARK_TS_DECL_WRTL(C)                            \
     181                 :             :   (MARK_TS_DECL_COMMON (C),                             \
     182                 :             :    tree_contains_struct[C][TS_DECL_WRTL] = true)
     183                 :             : 
     184                 :             : #define MARK_TS_DECL_WITH_VIS(C)                        \
     185                 :             :   (MARK_TS_DECL_WRTL (C),                               \
     186                 :             :    tree_contains_struct[C][TS_DECL_WITH_VIS] = true)
     187                 :             : 
     188                 :             : #define MARK_TS_DECL_NON_COMMON(C)                      \
     189                 :             :   (MARK_TS_DECL_WITH_VIS (C),                           \
     190                 :             :    tree_contains_struct[C][TS_DECL_NON_COMMON] = true)
     191                 :             : 
     192                 :             : #define MARK_TS_EXP(C)                                  \
     193                 :             :   (MARK_TS_TYPED (C),                                   \
     194                 :             :    tree_contains_struct[C][TS_EXP] = true)
     195                 :             : 
     196                 :             : /* Returns the string representing CLASS.  */
     197                 :             : 
     198                 :             : #define TREE_CODE_CLASS_STRING(CLASS)\
     199                 :             :         tree_code_class_strings[(int) (CLASS)]
     200                 :             : 
     201                 :             : #if __cpp_inline_variables < 201606L
     202                 :             : #define TREE_CODE_CLASS(CODE)   \
     203                 :             :   tree_code_type_tmpl <0>::tree_code_type[(int) (CODE)]
     204                 :             : #else
     205                 :             : #define TREE_CODE_CLASS(CODE)   tree_code_type[(int) (CODE)]
     206                 :             : #endif
     207                 :             : 
     208                 :             : /* Nonzero if NODE represents an exceptional code.  */
     209                 :             : 
     210                 :             : #define EXCEPTIONAL_CLASS_P(NODE)\
     211                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_exceptional)
     212                 :             : 
     213                 :             : /* Nonzero if NODE represents a constant.  */
     214                 :             : 
     215                 :             : #define CONSTANT_CLASS_P(NODE)\
     216                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_constant)
     217                 :             : 
     218                 :             : /* Nonzero if NODE represents a constant, or is a location wrapper
     219                 :             :    around such a node.  */
     220                 :             : 
     221                 :             : #define CONSTANT_CLASS_OR_WRAPPER_P(NODE)\
     222                 :             :         (CONSTANT_CLASS_P (tree_strip_any_location_wrapper (NODE)))
     223                 :             : 
     224                 :             : /* Nonzero if NODE represents a type.  */
     225                 :             : 
     226                 :             : #define TYPE_P(NODE)\
     227                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_type)
     228                 :             : 
     229                 :             : /* Nonzero if NODE represents a declaration.  */
     230                 :             : 
     231                 :             : #define DECL_P(NODE)\
     232                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_declaration)
     233                 :             : 
     234                 :             : /* True if NODE designates a variable declaration.  */
     235                 :             : #define VAR_P(NODE) \
     236                 :             :   (TREE_CODE (NODE) == VAR_DECL)
     237                 :             : 
     238                 :             : /* Nonzero if DECL represents a VAR_DECL or FUNCTION_DECL.  */
     239                 :             : 
     240                 :             : #define VAR_OR_FUNCTION_DECL_P(DECL)\
     241                 :             :   (TREE_CODE (DECL) == VAR_DECL || TREE_CODE (DECL) == FUNCTION_DECL)
     242                 :             : 
     243                 :             : /* Nonzero if NODE represents a INDIRECT_REF.  Keep these checks in
     244                 :             :    ascending code order.  */
     245                 :             : 
     246                 :             : #define INDIRECT_REF_P(NODE)\
     247                 :             :   (TREE_CODE (NODE) == INDIRECT_REF)
     248                 :             : 
     249                 :             : /* Nonzero if NODE represents a reference.  */
     250                 :             : 
     251                 :             : #define REFERENCE_CLASS_P(NODE)\
     252                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_reference)
     253                 :             : 
     254                 :             : /* Nonzero if NODE represents a comparison.  */
     255                 :             : 
     256                 :             : #define COMPARISON_CLASS_P(NODE)\
     257                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_comparison)
     258                 :             : 
     259                 :             : /* Nonzero if NODE represents a unary arithmetic expression.  */
     260                 :             : 
     261                 :             : #define UNARY_CLASS_P(NODE)\
     262                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_unary)
     263                 :             : 
     264                 :             : /* Nonzero if NODE represents a binary arithmetic expression.  */
     265                 :             : 
     266                 :             : #define BINARY_CLASS_P(NODE)\
     267                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_binary)
     268                 :             : 
     269                 :             : /* Nonzero if NODE represents a statement expression.  */
     270                 :             : 
     271                 :             : #define STATEMENT_CLASS_P(NODE)\
     272                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_statement)
     273                 :             : 
     274                 :             : /* Nonzero if NODE represents a function call-like expression with a
     275                 :             :    variable-length operand vector.  */
     276                 :             : 
     277                 :             : #define VL_EXP_CLASS_P(NODE)\
     278                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_vl_exp)
     279                 :             : 
     280                 :             : /* Nonzero if NODE represents any other expression.  */
     281                 :             : 
     282                 :             : #define EXPRESSION_CLASS_P(NODE)\
     283                 :             :         (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_expression)
     284                 :             : 
     285                 :             : /* Returns nonzero iff NODE represents a type or declaration.  */
     286                 :             : 
     287                 :             : #define IS_TYPE_OR_DECL_P(NODE)\
     288                 :             :         (TYPE_P (NODE) || DECL_P (NODE))
     289                 :             : 
     290                 :             : /* Returns nonzero iff CLASS is the tree-code class of an
     291                 :             :    expression.  */
     292                 :             : 
     293                 :             : #define IS_EXPR_CODE_CLASS(CLASS)\
     294                 :             :         ((CLASS) >= tcc_reference && (CLASS) <= tcc_expression)
     295                 :             : 
     296                 :             : /* Returns nonzero iff NODE is an expression of some kind.  */
     297                 :             : 
     298                 :             : #define EXPR_P(NODE) IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (NODE)))
     299                 :             : 
     300                 :             : #if __cpp_inline_variables < 201606L
     301                 :             : #define TREE_CODE_LENGTH(CODE)  \
     302                 :             :   tree_code_length_tmpl <0>::tree_code_length[(int) (CODE)]
     303                 :             : #else
     304                 :             : #define TREE_CODE_LENGTH(CODE)  tree_code_length[(int) (CODE)]
     305                 :             : #endif
     306                 :             : 
     307                 :             : 
     308                 :             : /* Helper macros for math builtins.  */
     309                 :             : 
     310                 :             : #define CASE_FLT_FN(FN) case FN: case FN##F: case FN##L
     311                 :             : #define CASE_FLT_FN_FLOATN_NX(FN)                          \
     312                 :             :   case FN##F16: case FN##F32: case FN##F64: case FN##F128: \
     313                 :             :   case FN##F32X: case FN##F64X: case FN##F128X
     314                 :             : #define CASE_FLT_FN_REENT(FN) case FN##_R: case FN##F_R: case FN##L_R
     315                 :             : #define CASE_INT_FN(FN) case FN: case FN##L: case FN##LL: case FN##IMAX
     316                 :             : 
     317                 :             : #define NULL_TREE (tree) NULL
     318                 :             : 
     319                 :             : /* Define accessors for the fields that all tree nodes have
     320                 :             :    (though some fields are not used for all kinds of nodes).  */
     321                 :             : 
     322                 :             : /* The tree-code says what kind of node it is.
     323                 :             :    Codes are defined in tree.def.  */
     324                 :             : #define TREE_CODE(NODE) ((enum tree_code) (NODE)->base.code)
     325                 :             : #define TREE_SET_CODE(NODE, VALUE) ((NODE)->base.code = (VALUE))
     326                 :             : 
     327                 :             : /* When checking is enabled, errors will be generated if a tree node
     328                 :             :    is accessed incorrectly. The macros die with a fatal error.  */
     329                 :             : #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
     330                 :             : 
     331                 :             : #define TREE_CHECK(T, CODE) \
     332                 :             : (tree_check ((T), __FILE__, __LINE__, __FUNCTION__, (CODE)))
     333                 :             : 
     334                 :             : #define TREE_NOT_CHECK(T, CODE) \
     335                 :             : (tree_not_check ((T), __FILE__, __LINE__, __FUNCTION__, (CODE)))
     336                 :             : 
     337                 :             : #define TREE_CHECK2(T, CODE1, CODE2) \
     338                 :             : (tree_check2 ((T), __FILE__, __LINE__, __FUNCTION__, (CODE1), (CODE2)))
     339                 :             : 
     340                 :             : #define TREE_NOT_CHECK2(T, CODE1, CODE2) \
     341                 :             : (tree_not_check2 ((T), __FILE__, __LINE__, __FUNCTION__, (CODE1), (CODE2)))
     342                 :             : 
     343                 :             : #define TREE_CHECK3(T, CODE1, CODE2, CODE3) \
     344                 :             : (tree_check3 ((T), __FILE__, __LINE__, __FUNCTION__, (CODE1), (CODE2), (CODE3)))
     345                 :             : 
     346                 :             : #define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) \
     347                 :             : (tree_not_check3 ((T), __FILE__, __LINE__, __FUNCTION__, \
     348                 :             :                                (CODE1), (CODE2), (CODE3)))
     349                 :             : 
     350                 :             : #define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) \
     351                 :             : (tree_check4 ((T), __FILE__, __LINE__, __FUNCTION__, \
     352                 :             :                            (CODE1), (CODE2), (CODE3), (CODE4)))
     353                 :             : 
     354                 :             : #define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) \
     355                 :             : (tree_not_check4 ((T), __FILE__, __LINE__, __FUNCTION__, \
     356                 :             :                                (CODE1), (CODE2), (CODE3), (CODE4)))
     357                 :             : 
     358                 :             : #define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) \
     359                 :             : (tree_check5 ((T), __FILE__, __LINE__, __FUNCTION__, \
     360                 :             :                            (CODE1), (CODE2), (CODE3), (CODE4), (CODE5)))
     361                 :             : 
     362                 :             : #define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) \
     363                 :             : (tree_not_check5 ((T), __FILE__, __LINE__, __FUNCTION__, \
     364                 :             :                                (CODE1), (CODE2), (CODE3), (CODE4), (CODE5)))
     365                 :             : 
     366                 :             : #define TREE_CHECK6(T, CODE1, CODE2, CODE3, CODE4, CODE5, CODE6) \
     367                 :             : (tree_check6 ((T), __FILE__, __LINE__, __FUNCTION__, \
     368                 :             :                         (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), (CODE6)))
     369                 :             : 
     370                 :             : #define TREE_NOT_CHECK6(T, CODE1, CODE2, CODE3, CODE4, CODE5, CODE6) \
     371                 :             : (tree_not_check6 ((T), __FILE__, __LINE__, __FUNCTION__, \
     372                 :             :                         (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), (CODE6)))
     373                 :             : 
     374                 :             : #define CONTAINS_STRUCT_CHECK(T, STRUCT) \
     375                 :             : (contains_struct_check ((T), (STRUCT), __FILE__, __LINE__, __FUNCTION__))
     376                 :             : 
     377                 :             : #define TREE_CLASS_CHECK(T, CLASS) \
     378                 :             : (tree_class_check ((T), (CLASS), __FILE__, __LINE__, __FUNCTION__))
     379                 :             : 
     380                 :             : #define TREE_RANGE_CHECK(T, CODE1, CODE2) \
     381                 :             : (tree_range_check ((T), (CODE1), (CODE2), __FILE__, __LINE__, __FUNCTION__))
     382                 :             : 
     383                 :             : #define OMP_CLAUSE_SUBCODE_CHECK(T, CODE) \
     384                 :             : (omp_clause_subcode_check ((T), (CODE), __FILE__, __LINE__, __FUNCTION__))
     385                 :             : 
     386                 :             : #define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) \
     387                 :             : (omp_clause_range_check ((T), (CODE1), (CODE2), \
     388                 :             :                                       __FILE__, __LINE__, __FUNCTION__))
     389                 :             : 
     390                 :             : /* These checks have to be special cased.  */
     391                 :             : #define EXPR_CHECK(T) \
     392                 :             : (expr_check ((T), __FILE__, __LINE__, __FUNCTION__))
     393                 :             : 
     394                 :             : /* These checks have to be special cased.  */
     395                 :             : #define NON_TYPE_CHECK(T) \
     396                 :             : (non_type_check ((T), __FILE__, __LINE__, __FUNCTION__))
     397                 :             : 
     398                 :             : /* These checks have to be special cased.  */
     399                 :             : #define ANY_INTEGRAL_TYPE_CHECK(T) \
     400                 :             : (any_integral_type_check ((T), __FILE__, __LINE__, __FUNCTION__))
     401                 :             : 
     402                 :             : #define TREE_INT_CST_ELT_CHECK(T, I) \
     403                 :             : (*tree_int_cst_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))
     404                 :             : 
     405                 :             : #define TREE_VEC_ELT_CHECK(T, I) \
     406                 :             : (*(CONST_CAST2 (tree *, typeof (T)*, \
     407                 :             :      tree_vec_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))))
     408                 :             : 
     409                 :             : #define OMP_CLAUSE_ELT_CHECK(T, I) \
     410                 :             : (*(omp_clause_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__)))
     411                 :             : 
     412                 :             : /* Special checks for TREE_OPERANDs.  */
     413                 :             : #define TREE_OPERAND_CHECK(T, I) \
     414                 :             : (*(CONST_CAST2 (tree*, typeof (T)*, \
     415                 :             :      tree_operand_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))))
     416                 :             : 
     417                 :             : #define TREE_OPERAND_CHECK_CODE(T, CODE, I) \
     418                 :             : (*(tree_operand_check_code ((T), (CODE), (I), \
     419                 :             :                                          __FILE__, __LINE__, __FUNCTION__)))
     420                 :             : 
     421                 :             : /* Nodes are chained together for many purposes.
     422                 :             :    Types are chained together to record them for being output to the debugger
     423                 :             :    (see the function `chain_type').
     424                 :             :    Decls in the same scope are chained together to record the contents
     425                 :             :    of the scope.
     426                 :             :    Statement nodes for successive statements used to be chained together.
     427                 :             :    Often lists of things are represented by TREE_LIST nodes that
     428                 :             :    are chained together.  */
     429                 :             : 
     430                 :             : #define TREE_CHAIN(NODE) \
     431                 :             : (CONTAINS_STRUCT_CHECK (NODE, TS_COMMON)->common.chain)
     432                 :             : 
     433                 :             : /* In all nodes that are expressions, this is the data type of the expression.
     434                 :             :    In POINTER_TYPE nodes, this is the type that the pointer points to.
     435                 :             :    In ARRAY_TYPE nodes, this is the type of the elements.
     436                 :             :    In VECTOR_TYPE nodes, this is the type of the elements.  */
     437                 :             : #define TREE_TYPE(NODE) \
     438                 :             : (CONTAINS_STRUCT_CHECK (NODE, TS_TYPED)->typed.type)
     439                 :             : 
     440                 :             : extern void tree_contains_struct_check_failed (const_tree,
     441                 :             :                                                const enum tree_node_structure_enum,
     442                 :             :                                                const char *, int, const char *)
     443                 :             :   ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     444                 :             : 
     445                 :             : extern void tree_check_failed (const_tree, const char *, int, const char *,
     446                 :             :                                ...) ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     447                 :             : extern void tree_not_check_failed (const_tree, const char *, int, const char *,
     448                 :             :                                    ...) ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     449                 :             : extern void tree_class_check_failed (const_tree, const enum tree_code_class,
     450                 :             :                                      const char *, int, const char *)
     451                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     452                 :             : extern void tree_range_check_failed (const_tree, const char *, int,
     453                 :             :                                      const char *, enum tree_code,
     454                 :             :                                      enum tree_code)
     455                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     456                 :             : extern void tree_not_class_check_failed (const_tree,
     457                 :             :                                          const enum tree_code_class,
     458                 :             :                                          const char *, int, const char *)
     459                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     460                 :             : extern void tree_int_cst_elt_check_failed (int, int, const char *,
     461                 :             :                                            int, const char *)
     462                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     463                 :             : extern void tree_vec_elt_check_failed (int, int, const char *,
     464                 :             :                                        int, const char *)
     465                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     466                 :             : extern void phi_node_elt_check_failed (int, int, const char *,
     467                 :             :                                        int, const char *)
     468                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     469                 :             : extern void tree_operand_check_failed (int, const_tree,
     470                 :             :                                        const char *, int, const char *)
     471                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     472                 :             : extern void omp_clause_check_failed (const_tree, const char *, int,
     473                 :             :                                      const char *, enum omp_clause_code)
     474                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     475                 :             : extern void omp_clause_operand_check_failed (int, const_tree, const char *,
     476                 :             :                                              int, const char *)
     477                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     478                 :             : extern void omp_clause_range_check_failed (const_tree, const char *, int,
     479                 :             :                                const char *, enum omp_clause_code,
     480                 :             :                                enum omp_clause_code)
     481                 :             :     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     482                 :             : 
     483                 :             : #else /* not ENABLE_TREE_CHECKING, or not gcc */
     484                 :             : 
     485                 :             : #define CONTAINS_STRUCT_CHECK(T, ENUM)          (T)
     486                 :             : #define TREE_CHECK(T, CODE)                     (T)
     487                 :             : #define TREE_NOT_CHECK(T, CODE)                 (T)
     488                 :             : #define TREE_CHECK2(T, CODE1, CODE2)            (T)
     489                 :             : #define TREE_NOT_CHECK2(T, CODE1, CODE2)        (T)
     490                 :             : #define TREE_CHECK3(T, CODE1, CODE2, CODE3)     (T)
     491                 :             : #define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) (T)
     492                 :             : #define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
     493                 :             : #define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
     494                 :             : #define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
     495                 :             : #define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
     496                 :             : #define TREE_CHECK6(T, CODE1, CODE2, CODE3, CODE4, CODE5, CODE6) (T)
     497                 :             : #define TREE_NOT_CHECK6(T, CODE1, CODE2, CODE3, CODE4, CODE5, CODE6) (T)
     498                 :             : #define TREE_CLASS_CHECK(T, CODE)               (T)
     499                 :             : #define TREE_RANGE_CHECK(T, CODE1, CODE2)       (T)
     500                 :             : #define EXPR_CHECK(T)                           (T)
     501                 :             : #define NON_TYPE_CHECK(T)                       (T)
     502                 :             : #define TREE_INT_CST_ELT_CHECK(T, I)            ((T)->int_cst.val[I])
     503                 :             : #define TREE_VEC_ELT_CHECK(T, I)                ((T)->vec.a[I])
     504                 :             : #define TREE_OPERAND_CHECK(T, I)                ((T)->exp.operands[I])
     505                 :             : #define TREE_OPERAND_CHECK_CODE(T, CODE, I)     ((T)->exp.operands[I])
     506                 :             : #define OMP_CLAUSE_ELT_CHECK(T, i)              ((T)->omp_clause.ops[i])
     507                 :             : #define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) (T)
     508                 :             : #define OMP_CLAUSE_SUBCODE_CHECK(T, CODE)       (T)
     509                 :             : #define ANY_INTEGRAL_TYPE_CHECK(T)              (T)
     510                 :             : 
     511                 :             : #define TREE_CHAIN(NODE) ((NODE)->common.chain)
     512                 :             : #define TREE_TYPE(NODE) ((NODE)->typed.type)
     513                 :             : 
     514                 :             : #endif
     515                 :             : 
     516                 :             : #define TREE_BLOCK(NODE)                (tree_block (NODE))
     517                 :             : #define TREE_SET_BLOCK(T, B)            (tree_set_block ((T), (B)))
     518                 :             : 
     519                 :             : #include "tree-check.h"
     520                 :             : 
     521                 :             : #define TYPE_CHECK(T)           TREE_CLASS_CHECK (T, tcc_type)
     522                 :             : #define DECL_MINIMAL_CHECK(T)   CONTAINS_STRUCT_CHECK (T, TS_DECL_MINIMAL)
     523                 :             : #define DECL_COMMON_CHECK(T)    CONTAINS_STRUCT_CHECK (T, TS_DECL_COMMON)
     524                 :             : #define DECL_WRTL_CHECK(T)      CONTAINS_STRUCT_CHECK (T, TS_DECL_WRTL)
     525                 :             : #define DECL_WITH_VIS_CHECK(T)  CONTAINS_STRUCT_CHECK (T, TS_DECL_WITH_VIS)
     526                 :             : #define DECL_NON_COMMON_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_NON_COMMON)
     527                 :             : #define CST_CHECK(T)            TREE_CLASS_CHECK (T, tcc_constant)
     528                 :             : #define STMT_CHECK(T)           TREE_CLASS_CHECK (T, tcc_statement)
     529                 :             : #define VL_EXP_CHECK(T)         TREE_CLASS_CHECK (T, tcc_vl_exp)
     530                 :             : #define FUNC_OR_METHOD_CHECK(T) TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TYPE)
     531                 :             : #define PTR_OR_REF_CHECK(T)     TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE)
     532                 :             : 
     533                 :             : #define RECORD_OR_UNION_CHECK(T)        \
     534                 :             :   TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
     535                 :             : #define NOT_RECORD_OR_UNION_CHECK(T) \
     536                 :             :   TREE_NOT_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
     537                 :             : #define ARRAY_OR_INTEGER_TYPE_CHECK(T)  \
     538                 :             :   TREE_CHECK2 (T, ARRAY_TYPE, INTEGER_TYPE)
     539                 :             : 
     540                 :             : #define NUMERICAL_TYPE_CHECK(T)                                 \
     541                 :             :   TREE_CHECK6 (T, INTEGER_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, REAL_TYPE, \
     542                 :             :                FIXED_POINT_TYPE, BITINT_TYPE)
     543                 :             : 
     544                 :             : /* Here is how primitive or already-canonicalized types' hash codes
     545                 :             :    are made.  */
     546                 :             : #define TYPE_HASH(TYPE) (TYPE_UID (TYPE))
     547                 :             : 
     548                 :             : /* A simple hash function for an arbitrary tree node.  This must not be
     549                 :             :    used in hash tables which are saved to a PCH.  */
     550                 :             : #define TREE_HASH(NODE) ((size_t) (NODE) & 0777777)
     551                 :             : 
     552                 :             : /* Tests if CODE is a conversion expr (NOP_EXPR or CONVERT_EXPR).  */
     553                 :             : #define CONVERT_EXPR_CODE_P(CODE)                               \
     554                 :             :   ((CODE) == NOP_EXPR || (CODE) == CONVERT_EXPR)
     555                 :             : 
     556                 :             : /* Similarly, but accept an expression instead of a tree code.  */
     557                 :             : #define CONVERT_EXPR_P(EXP)     CONVERT_EXPR_CODE_P (TREE_CODE (EXP))
     558                 :             : 
     559                 :             : /* Generate case for NOP_EXPR, CONVERT_EXPR.  */
     560                 :             : 
     561                 :             : #define CASE_CONVERT                                            \
     562                 :             :   case NOP_EXPR:                                                \
     563                 :             :   case CONVERT_EXPR
     564                 :             : 
     565                 :             : /* Given an expression as a tree, strip any conversion that generates
     566                 :             :    no instruction.  Accepts both tree and const_tree arguments since
     567                 :             :    we are not modifying the tree itself.  */
     568                 :             : 
     569                 :             : #define STRIP_NOPS(EXP) \
     570                 :             :   (EXP) = tree_strip_nop_conversions (CONST_CAST_TREE (EXP))
     571                 :             : 
     572                 :             : /* Like STRIP_NOPS, but don't let the signedness change either.  */
     573                 :             : 
     574                 :             : #define STRIP_SIGN_NOPS(EXP) \
     575                 :             :   (EXP) = tree_strip_sign_nop_conversions (CONST_CAST_TREE (EXP))
     576                 :             : 
     577                 :             : /* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */
     578                 :             : 
     579                 :             : #define STRIP_TYPE_NOPS(EXP) \
     580                 :             :   while ((CONVERT_EXPR_P (EXP)                                  \
     581                 :             :           || TREE_CODE (EXP) == NON_LVALUE_EXPR)                \
     582                 :             :          && TREE_OPERAND (EXP, 0) != error_mark_node            \
     583                 :             :          && (TREE_TYPE (EXP)                                    \
     584                 :             :              == TREE_TYPE (TREE_OPERAND (EXP, 0))))             \
     585                 :             :     (EXP) = TREE_OPERAND (EXP, 0)
     586                 :             : 
     587                 :             : /* Remove unnecessary type conversions according to
     588                 :             :    tree_ssa_useless_type_conversion.  */
     589                 :             : 
     590                 :             : #define STRIP_USELESS_TYPE_CONVERSION(EXP) \
     591                 :             :   (EXP) = tree_ssa_strip_useless_type_conversions (EXP)
     592                 :             : 
     593                 :             : /* Remove any VIEW_CONVERT_EXPR or NON_LVALUE_EXPR that's purely
     594                 :             :    in use to provide a location_t.  */
     595                 :             : 
     596                 :             : #define STRIP_ANY_LOCATION_WRAPPER(EXP) \
     597                 :             :   (EXP) = tree_strip_any_location_wrapper (CONST_CAST_TREE (EXP))
     598                 :             : 
     599                 :             : /* Nonzero if TYPE represents a vector type.  */
     600                 :             : 
     601                 :             : #define VECTOR_TYPE_P(TYPE) (TREE_CODE (TYPE) == VECTOR_TYPE)
     602                 :             : 
     603                 :             : /* Nonzero if TYPE represents a vector of booleans.  */
     604                 :             : 
     605                 :             : #define VECTOR_BOOLEAN_TYPE_P(TYPE)                             \
     606                 :             :   (TREE_CODE (TYPE) == VECTOR_TYPE                      \
     607                 :             :    && TREE_CODE (TREE_TYPE (TYPE)) == BOOLEAN_TYPE)
     608                 :             : 
     609                 :             : /* Nonzero if TYPE represents an integral type.  Note that we do not
     610                 :             :    include COMPLEX types here.  Keep these checks in ascending code
     611                 :             :    order.  */
     612                 :             : 
     613                 :             : #define INTEGRAL_TYPE_P(TYPE)  \
     614                 :             :   (TREE_CODE (TYPE) == ENUMERAL_TYPE  \
     615                 :             :    || TREE_CODE (TYPE) == BOOLEAN_TYPE \
     616                 :             :    || TREE_CODE (TYPE) == INTEGER_TYPE \
     617                 :             :    || TREE_CODE (TYPE) == BITINT_TYPE)
     618                 :             : 
     619                 :             : /* Nonzero if TYPE represents an integral type, including complex
     620                 :             :    and vector integer types.  */
     621                 :             : 
     622                 :             : #define ANY_INTEGRAL_TYPE_P(TYPE)               \
     623                 :             :   (INTEGRAL_TYPE_P (TYPE)                       \
     624                 :             :    || ((TREE_CODE (TYPE) == COMPLEX_TYPE        \
     625                 :             :         || VECTOR_TYPE_P (TYPE))                \
     626                 :             :        && INTEGRAL_TYPE_P (TREE_TYPE (TYPE))))
     627                 :             : 
     628                 :             : /* Nonzero if TYPE is bit-precise integer type.  */
     629                 :             : 
     630                 :             : #define BITINT_TYPE_P(TYPE) (TREE_CODE (TYPE) == BITINT_TYPE)
     631                 :             : 
     632                 :             : /* Nonzero if TYPE represents a non-saturating fixed-point type.  */
     633                 :             : 
     634                 :             : #define NON_SAT_FIXED_POINT_TYPE_P(TYPE) \
     635                 :             :   (TREE_CODE (TYPE) == FIXED_POINT_TYPE && !TYPE_SATURATING (TYPE))
     636                 :             : 
     637                 :             : /* Nonzero if TYPE represents a saturating fixed-point type.  */
     638                 :             : 
     639                 :             : #define SAT_FIXED_POINT_TYPE_P(TYPE) \
     640                 :             :   (TREE_CODE (TYPE) == FIXED_POINT_TYPE && TYPE_SATURATING (TYPE))
     641                 :             : 
     642                 :             : /* Nonzero if TYPE represents a fixed-point type.  */
     643                 :             : 
     644                 :             : #define FIXED_POINT_TYPE_P(TYPE)        (TREE_CODE (TYPE) == FIXED_POINT_TYPE)
     645                 :             : 
     646                 :             : /* Nonzero if TYPE represents a scalar floating-point type.  */
     647                 :             : 
     648                 :             : #define SCALAR_FLOAT_TYPE_P(TYPE) (TREE_CODE (TYPE) == REAL_TYPE)
     649                 :             : 
     650                 :             : /* Nonzero if TYPE represents a complex floating-point type.  */
     651                 :             : 
     652                 :             : #define COMPLEX_FLOAT_TYPE_P(TYPE)      \
     653                 :             :   (TREE_CODE (TYPE) == COMPLEX_TYPE     \
     654                 :             :    && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)
     655                 :             : 
     656                 :             : /* Nonzero if TYPE represents a vector integer type.  */
     657                 :             :                 
     658                 :             : #define VECTOR_INTEGER_TYPE_P(TYPE)                     \
     659                 :             :   (VECTOR_TYPE_P (TYPE)                                 \
     660                 :             :    && TREE_CODE (TREE_TYPE (TYPE)) == INTEGER_TYPE)
     661                 :             : 
     662                 :             : 
     663                 :             : /* Nonzero if TYPE represents a vector floating-point type.  */
     664                 :             : 
     665                 :             : #define VECTOR_FLOAT_TYPE_P(TYPE)       \
     666                 :             :   (VECTOR_TYPE_P (TYPE)                 \
     667                 :             :    && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)
     668                 :             : 
     669                 :             : /* Nonzero if TYPE represents a floating-point type, including complex
     670                 :             :    and vector floating-point types.  The vector and complex check does
     671                 :             :    not use the previous two macros to enable early folding.  */
     672                 :             : 
     673                 :             : #define FLOAT_TYPE_P(TYPE)                      \
     674                 :             :   (SCALAR_FLOAT_TYPE_P (TYPE)                   \
     675                 :             :    || ((TREE_CODE (TYPE) == COMPLEX_TYPE        \
     676                 :             :         || VECTOR_TYPE_P (TYPE))                \
     677                 :             :        && SCALAR_FLOAT_TYPE_P (TREE_TYPE (TYPE))))
     678                 :             : 
     679                 :             : /* Nonzero if TYPE represents a decimal floating-point type.  */
     680                 :             : #define DECIMAL_FLOAT_TYPE_P(TYPE)              \
     681                 :             :   (SCALAR_FLOAT_TYPE_P (TYPE)                   \
     682                 :             :    && DECIMAL_FLOAT_MODE_P (TYPE_MODE (TYPE)))
     683                 :             : 
     684                 :             : /* Nonzero if TYPE is a record or union type.  */
     685                 :             : #define RECORD_OR_UNION_TYPE_P(TYPE)            \
     686                 :             :   (TREE_CODE (TYPE) == RECORD_TYPE              \
     687                 :             :    || TREE_CODE (TYPE) == UNION_TYPE            \
     688                 :             :    || TREE_CODE (TYPE) == QUAL_UNION_TYPE)
     689                 :             : 
     690                 :             : /* Nonzero if TYPE represents an aggregate (multi-component) type.
     691                 :             :    Keep these checks in ascending code order.  */
     692                 :             : 
     693                 :             : #define AGGREGATE_TYPE_P(TYPE) \
     694                 :             :   (TREE_CODE (TYPE) == ARRAY_TYPE || RECORD_OR_UNION_TYPE_P (TYPE))
     695                 :             : 
     696                 :             : /* Nonzero if TYPE represents a pointer or reference type.
     697                 :             :    (It should be renamed to INDIRECT_TYPE_P.)  Keep these checks in
     698                 :             :    ascending code order.  */
     699                 :             : 
     700                 :             : #define POINTER_TYPE_P(TYPE) \
     701                 :             :   (TREE_CODE (TYPE) == POINTER_TYPE || TREE_CODE (TYPE) == REFERENCE_TYPE)
     702                 :             : 
     703                 :             : /* Nonzero if TYPE represents a pointer to function.  */
     704                 :             : #define FUNCTION_POINTER_TYPE_P(TYPE) \
     705                 :             :   (POINTER_TYPE_P (TYPE) && TREE_CODE (TREE_TYPE (TYPE)) == FUNCTION_TYPE)
     706                 :             : 
     707                 :             : /* Nonzero if this type is a complete type.  */
     708                 :             : #define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE)
     709                 :             : 
     710                 :             : /* Nonzero if this type is the (possibly qualified) void type.  */
     711                 :             : #define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE)
     712                 :             : 
     713                 :             : /* Nonzero if this type is complete or is cv void.  */
     714                 :             : #define COMPLETE_OR_VOID_TYPE_P(NODE) \
     715                 :             :   (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE))
     716                 :             : 
     717                 :             : /* Nonzero if this type is complete or is an array with unspecified bound.  */
     718                 :             : #define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \
     719                 :             :   (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE)))
     720                 :             : 
     721                 :             : #define FUNC_OR_METHOD_TYPE_P(NODE) \
     722                 :             :   (TREE_CODE (NODE) == FUNCTION_TYPE || TREE_CODE (NODE) == METHOD_TYPE)
     723                 :             : 
     724                 :             : #define OPAQUE_TYPE_P(NODE) \
     725                 :             :     (TREE_CODE (NODE) == OPAQUE_TYPE)
     726                 :             : 
     727                 :             : /* Define many boolean fields that all tree nodes have.  */
     728                 :             : 
     729                 :             : /* In VAR_DECL, PARM_DECL and RESULT_DECL nodes, nonzero means address
     730                 :             :    of this is needed.  So it cannot be in a register.
     731                 :             :    In a FUNCTION_DECL it has no meaning.
     732                 :             :    In LABEL_DECL nodes, it means a goto for this label has been seen
     733                 :             :    from a place outside all binding contours that restore stack levels.
     734                 :             :    In an artificial SSA_NAME that points to a stack partition with at least
     735                 :             :    two variables, it means that at least one variable has TREE_ADDRESSABLE.
     736                 :             :    In ..._TYPE nodes, it means that objects of this type must be fully
     737                 :             :    addressable.  This means that pieces of this object cannot go into
     738                 :             :    register parameters, for example.  If this a function type, this
     739                 :             :    means that the value must be returned in memory.
     740                 :             :    In CONSTRUCTOR nodes, it means object constructed must be in memory.
     741                 :             :    In IDENTIFIER_NODEs, this means that some extern decl for this name
     742                 :             :    had its address taken.  That matters for inline functions.
     743                 :             :    In a STMT_EXPR, it means we want the result of the enclosed expression.  */
     744                 :             : #define TREE_ADDRESSABLE(NODE) ((NODE)->base.addressable_flag)
     745                 :             : 
     746                 :             : /* Set on a CALL_EXPR if the call is in a tail position, ie. just before the
     747                 :             :    exit of a function.  Calls for which this is true are candidates for tail
     748                 :             :    call optimizations.  */
     749                 :             : #define CALL_EXPR_TAILCALL(NODE) \
     750                 :             :   (CALL_EXPR_CHECK (NODE)->base.addressable_flag)
     751                 :             : 
     752                 :             : /* Set on a CALL_EXPR if the call has been marked as requiring tail call
     753                 :             :    optimization for correctness.  */
     754                 :             : #define CALL_EXPR_MUST_TAIL_CALL(NODE) \
     755                 :             :   (CALL_EXPR_CHECK (NODE)->base.static_flag)
     756                 :             : 
     757                 :             : /* Used as a temporary field on a CASE_LABEL_EXPR to indicate that the
     758                 :             :    CASE_LOW operand has been processed.  */
     759                 :             : #define CASE_LOW_SEEN(NODE) \
     760                 :             :   (CASE_LABEL_EXPR_CHECK (NODE)->base.addressable_flag)
     761                 :             : 
     762                 :             : #define PREDICT_EXPR_OUTCOME(NODE) \
     763                 :             :   ((enum prediction) (PREDICT_EXPR_CHECK (NODE)->base.addressable_flag))
     764                 :             : #define SET_PREDICT_EXPR_OUTCOME(NODE, OUTCOME) \
     765                 :             :   (PREDICT_EXPR_CHECK (NODE)->base.addressable_flag = (int) OUTCOME)
     766                 :             : #define PREDICT_EXPR_PREDICTOR(NODE) \
     767                 :             :   ((enum br_predictor)tree_to_shwi (TREE_OPERAND (PREDICT_EXPR_CHECK (NODE), 0)))
     768                 :             : 
     769                 :             : /* In a VAR_DECL, nonzero means allocate static storage.
     770                 :             :    In a FUNCTION_DECL, nonzero if function has been defined.
     771                 :             :    In a CONSTRUCTOR, nonzero means allocate static storage.  */
     772                 :             : #define TREE_STATIC(NODE) ((NODE)->base.static_flag)
     773                 :             : 
     774                 :             : /* In an ADDR_EXPR, nonzero means do not use a trampoline.  */
     775                 :             : #define TREE_NO_TRAMPOLINE(NODE) (ADDR_EXPR_CHECK (NODE)->base.static_flag)
     776                 :             : 
     777                 :             : /* In a TARGET_EXPR or WITH_CLEANUP_EXPR, means that the pertinent cleanup
     778                 :             :    should only be executed if an exception is thrown, not on normal exit
     779                 :             :    of its scope.  */
     780                 :             : #define CLEANUP_EH_ONLY(NODE) ((NODE)->base.static_flag)
     781                 :             : 
     782                 :             : /* In a TRY_CATCH_EXPR, means that the handler should be considered a
     783                 :             :    separate cleanup in honor_protect_cleanup_actions.  */
     784                 :             : #define TRY_CATCH_IS_CLEANUP(NODE) \
     785                 :             :   (TRY_CATCH_EXPR_CHECK (NODE)->base.static_flag)
     786                 :             : 
     787                 :             : /* Used as a temporary field on a CASE_LABEL_EXPR to indicate that the
     788                 :             :    CASE_HIGH operand has been processed.  */
     789                 :             : #define CASE_HIGH_SEEN(NODE) \
     790                 :             :   (CASE_LABEL_EXPR_CHECK (NODE)->base.static_flag)
     791                 :             : 
     792                 :             : /* Used to mark scoped enums.  */
     793                 :             : #define ENUM_IS_SCOPED(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.static_flag)
     794                 :             : 
     795                 :             : /* Determines whether an ENUMERAL_TYPE has defined the list of constants. */
     796                 :             : #define ENUM_IS_OPAQUE(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.private_flag)
     797                 :             : 
     798                 :             : /* In an expr node (usually a conversion) this means the node was made
     799                 :             :    implicitly and should not lead to any sort of warning.  In a decl node,
     800                 :             :    warnings concerning the decl should be suppressed.  This is used at
     801                 :             :    least for used-before-set warnings, and it set after one warning is
     802                 :             :    emitted.  */
     803                 :             : #define TREE_NO_WARNING(NODE) ((NODE)->base.nowarning_flag)
     804                 :             : 
     805                 :             : /* Nonzero if we should warn about the change in empty class parameter
     806                 :             :    passing ABI in this TU.  */
     807                 :             : #define TRANSLATION_UNIT_WARN_EMPTY_P(NODE) \
     808                 :             :   (TRANSLATION_UNIT_DECL_CHECK (NODE)->decl_common.decl_flag_0)
     809                 :             : 
     810                 :             : /* Nonzero if this type is "empty" according to the particular psABI.  */
     811                 :             : #define TYPE_EMPTY_P(NODE) (TYPE_CHECK (NODE)->type_common.empty_flag)
     812                 :             : 
     813                 :             : /* Used to indicate that this TYPE represents a compiler-generated entity.  */
     814                 :             : #define TYPE_ARTIFICIAL(NODE) (TYPE_CHECK (NODE)->base.nowarning_flag)
     815                 :             : 
     816                 :             : /* True if the type is indivisible at the source level, i.e. if its
     817                 :             :    component parts cannot be accessed directly.  This is used to suppress
     818                 :             :    normal GNU extensions for target-specific vector types.  */
     819                 :             : #define TYPE_INDIVISIBLE_P(NODE) (TYPE_CHECK (NODE)->type_common.indivisible_p)
     820                 :             : 
     821                 :             : /* True if this is a stdarg function with no named arguments (C23
     822                 :             :    (...) prototype, where arguments can be accessed with va_start and
     823                 :             :    va_arg), as opposed to an unprototyped function.  */
     824                 :             : #define TYPE_NO_NAMED_ARGS_STDARG_P(NODE) \
     825                 :             :   (FUNC_OR_METHOD_CHECK (NODE)->type_common.no_named_args_stdarg_p)
     826                 :             : 
     827                 :             : /* True if this RECORD_TYPE or UNION_TYPE includes a flexible array member
     828                 :             :    as the last field recursively.  */
     829                 :             : #define TYPE_INCLUDES_FLEXARRAY(NODE) \
     830                 :             :   (RECORD_OR_UNION_CHECK (NODE)->type_common.no_named_args_stdarg_p)
     831                 :             : 
     832                 :             : /* In an IDENTIFIER_NODE, this means that assemble_name was called with
     833                 :             :    this string as an argument.  */
     834                 :             : #define TREE_SYMBOL_REFERENCED(NODE) \
     835                 :             :   (IDENTIFIER_NODE_CHECK (NODE)->base.static_flag)
     836                 :             : 
     837                 :             : /* Nonzero in a pointer or reference type means the data pointed to
     838                 :             :    by this type can alias anything.  */
     839                 :             : #define TYPE_REF_CAN_ALIAS_ALL(NODE) \
     840                 :             :   (PTR_OR_REF_CHECK (NODE)->base.static_flag)
     841                 :             : 
     842                 :             : /* In an INTEGER_CST, REAL_CST, or COMPLEX_CST, this means
     843                 :             :    there was an overflow in folding.  */
     844                 :             : 
     845                 :             : #define TREE_OVERFLOW(NODE) (CST_CHECK (NODE)->base.public_flag)
     846                 :             : 
     847                 :             : /* TREE_OVERFLOW can only be true for EXPR of CONSTANT_CLASS_P.  */
     848                 :             : 
     849                 :             : #define TREE_OVERFLOW_P(EXPR) \
     850                 :             :  (CONSTANT_CLASS_P (EXPR) && TREE_OVERFLOW (EXPR))
     851                 :             : 
     852                 :             : /* In a VAR_DECL, FUNCTION_DECL, NAMESPACE_DECL or TYPE_DECL,
     853                 :             :    nonzero means name is to be accessible from outside this translation unit.
     854                 :             :    In an IDENTIFIER_NODE, nonzero means an external declaration
     855                 :             :    accessible from outside this translation unit was previously seen
     856                 :             :    for this name in an inner scope.  */
     857                 :             : #define TREE_PUBLIC(NODE) ((NODE)->base.public_flag)
     858                 :             : 
     859                 :             : /* In a _TYPE, indicates whether TYPE_CACHED_VALUES contains a vector
     860                 :             :    of cached values, or is something else.  */
     861                 :             : #define TYPE_CACHED_VALUES_P(NODE) (TYPE_CHECK (NODE)->base.public_flag)
     862                 :             : 
     863                 :             : /* In a SAVE_EXPR, indicates that the original expression has already
     864                 :             :    been substituted with a VAR_DECL that contains the value.  */
     865                 :             : #define SAVE_EXPR_RESOLVED_P(NODE) \
     866                 :             :   (SAVE_EXPR_CHECK (NODE)->base.public_flag)
     867                 :             : 
     868                 :             : /* Set on a CALL_EXPR if this stdarg call should be passed the argument
     869                 :             :    pack.  */
     870                 :             : #define CALL_EXPR_VA_ARG_PACK(NODE) \
     871                 :             :   (CALL_EXPR_CHECK (NODE)->base.public_flag)
     872                 :             : 
     873                 :             : /* In any expression, decl, or constant, nonzero means it has side effects or
     874                 :             :    reevaluation of the whole expression could produce a different value.
     875                 :             :    This is set if any subexpression is a function call, a side effect or a
     876                 :             :    reference to a volatile variable.  In a ..._DECL, this is set only if the
     877                 :             :    declaration said `volatile'.  This will never be set for a constant.  */
     878                 :             : #define TREE_SIDE_EFFECTS(NODE) \
     879                 :             :   (NON_TYPE_CHECK (NODE)->base.side_effects_flag)
     880                 :             : 
     881                 :             : /* In a LABEL_DECL, nonzero means this label had its address taken
     882                 :             :    and therefore can never be deleted and is a jump target for
     883                 :             :    computed gotos.  */
     884                 :             : #define FORCED_LABEL(NODE) (LABEL_DECL_CHECK (NODE)->base.side_effects_flag)
     885                 :             : 
     886                 :             : /* Whether a case or a user-defined label is allowed to fall through to.
     887                 :             :    This is used to implement -Wimplicit-fallthrough.  */
     888                 :             : #define FALLTHROUGH_LABEL_P(NODE) \
     889                 :             :   (LABEL_DECL_CHECK (NODE)->base.private_flag)
     890                 :             : 
     891                 :             : /* Set on the artificial label created for break; stmt from a switch.
     892                 :             :    This is used to implement -Wimplicit-fallthrough.  */
     893                 :             : #define SWITCH_BREAK_LABEL_P(NODE) \
     894                 :             :   (LABEL_DECL_CHECK (NODE)->base.protected_flag)
     895                 :             : 
     896                 :             : /* Set on label that is known not to be jumped to, it can be only
     897                 :             :    reached by falling through from previous statements.
     898                 :             :    This is used to implement -Wimplicit-fallthrough.  */
     899                 :             : #define UNUSED_LABEL_P(NODE) \
     900                 :             :   (LABEL_DECL_CHECK (NODE)->base.default_def_flag)
     901                 :             : 
     902                 :             : /* Nonzero means this expression is volatile in the C sense:
     903                 :             :    its address should be of type `volatile WHATEVER *'.
     904                 :             :    In other words, the declared item is volatile qualified.
     905                 :             :    This is used in _DECL nodes and _REF nodes.
     906                 :             :    On a FUNCTION_DECL node, this means the function does not
     907                 :             :    return normally.  This is the same effect as setting
     908                 :             :    the attribute noreturn on the function in C.
     909                 :             : 
     910                 :             :    In a ..._TYPE node, means this type is volatile-qualified.
     911                 :             :    But use TYPE_VOLATILE instead of this macro when the node is a type,
     912                 :             :    because eventually we may make that a different bit.
     913                 :             : 
     914                 :             :    If this bit is set in an expression, so is TREE_SIDE_EFFECTS.  */
     915                 :             : #define TREE_THIS_VOLATILE(NODE) ((NODE)->base.volatile_flag)
     916                 :             : 
     917                 :             : /* Nonzero means this node will not trap.  In an INDIRECT_REF, means
     918                 :             :    accessing the memory pointed to won't generate a trap.  However,
     919                 :             :    this only applies to an object when used appropriately: it doesn't
     920                 :             :    mean that writing a READONLY mem won't trap.
     921                 :             : 
     922                 :             :    In ARRAY_REF and ARRAY_RANGE_REF means that we know that the index
     923                 :             :    (or slice of the array) always belongs to the range of the array.
     924                 :             :    I.e. that the access will not trap, provided that the access to
     925                 :             :    the base to the array will not trap.  */
     926                 :             : #define TREE_THIS_NOTRAP(NODE) \
     927                 :             :   (TREE_CHECK5 (NODE, INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, \
     928                 :             :                 ARRAY_RANGE_REF)->base.nothrow_flag)
     929                 :             : 
     930                 :             : /* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node,
     931                 :             :    nonzero means it may not be the lhs of an assignment.
     932                 :             :    Nonzero in a FUNCTION_DECL means this function should be treated
     933                 :             :    as "const" function (can only read its arguments).  */
     934                 :             : #define TREE_READONLY(NODE) (NON_TYPE_CHECK (NODE)->base.readonly_flag)
     935                 :             : 
     936                 :             : /* Value of expression is constant.  Always on in all ..._CST nodes.  May
     937                 :             :    also appear in an expression or decl where the value is constant.  */
     938                 :             : #define TREE_CONSTANT(NODE) (NON_TYPE_CHECK (NODE)->base.constant_flag)
     939                 :             : 
     940                 :             : /* Nonzero if NODE, a type, has had its sizes gimplified.  */
     941                 :             : #define TYPE_SIZES_GIMPLIFIED(NODE) \
     942                 :             :   (TYPE_CHECK (NODE)->base.constant_flag)
     943                 :             : 
     944                 :             : /* In a decl (most significantly a FIELD_DECL), means an unsigned field.  */
     945                 :             : #define DECL_UNSIGNED(NODE) \
     946                 :             :   (DECL_COMMON_CHECK (NODE)->base.u.bits.unsigned_flag)
     947                 :             : 
     948                 :             : /* In integral and pointer types, means an unsigned type.  */
     949                 :             : #define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->base.u.bits.unsigned_flag)
     950                 :             : 
     951                 :             : /* Same as TYPE_UNSIGNED but converted to SIGNOP.  */
     952                 :             : #define TYPE_SIGN(NODE) ((signop) TYPE_UNSIGNED (NODE))
     953                 :             : 
     954                 :             : /* True if overflow wraps around for the given integral or pointer type.  That
     955                 :             :    is, TYPE_MAX + 1 == TYPE_MIN.  */
     956                 :             : #define TYPE_OVERFLOW_WRAPS(TYPE) \
     957                 :             :   (POINTER_TYPE_P (TYPE)                                        \
     958                 :             :    ? flag_wrapv_pointer                                         \
     959                 :             :    : (ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag       \
     960                 :             :       || flag_wrapv))
     961                 :             : 
     962                 :             : /* True if overflow is undefined for the given integral or pointer type.
     963                 :             :    We may optimize on the assumption that values in the type never overflow.
     964                 :             : 
     965                 :             :    IMPORTANT NOTE: Any optimization based on TYPE_OVERFLOW_UNDEFINED
     966                 :             :    must issue a warning based on warn_strict_overflow.  In some cases
     967                 :             :    it will be appropriate to issue the warning immediately, and in
     968                 :             :    other cases it will be appropriate to simply set a flag and let the
     969                 :             :    caller decide whether a warning is appropriate or not.  */
     970                 :             : #define TYPE_OVERFLOW_UNDEFINED(TYPE)                           \
     971                 :             :   (POINTER_TYPE_P (TYPE)                                        \
     972                 :             :    ? !flag_wrapv_pointer                                        \
     973                 :             :    : (!ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag      \
     974                 :             :       && !flag_wrapv && !flag_trapv))
     975                 :             : 
     976                 :             : /* True if overflow for the given integral type should issue a
     977                 :             :    trap.  */
     978                 :             : #define TYPE_OVERFLOW_TRAPS(TYPE) \
     979                 :             :   (!ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag && flag_trapv)
     980                 :             : 
     981                 :             : /* True if an overflow is to be preserved for sanitization.  */
     982                 :             : #define TYPE_OVERFLOW_SANITIZED(TYPE)                   \
     983                 :             :   (INTEGRAL_TYPE_P (TYPE)                               \
     984                 :             :    && !TYPE_OVERFLOW_WRAPS (TYPE)                       \
     985                 :             :    && (flag_sanitize & SANITIZE_SI_OVERFLOW))
     986                 :             : 
     987                 :             : /* Nonzero in a VAR_DECL or STRING_CST means assembler code has been written.
     988                 :             :    Nonzero in a FUNCTION_DECL means that the function has been compiled.
     989                 :             :    This is interesting in an inline function, since it might not need
     990                 :             :    to be compiled separately.
     991                 :             :    Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ENUMERAL_TYPE
     992                 :             :    or TYPE_DECL if the debugging info for the type has been written.
     993                 :             :    In a BLOCK node, nonzero if reorder_blocks has already seen this block.
     994                 :             :    In an SSA_NAME node, nonzero if the SSA_NAME occurs in an abnormal
     995                 :             :    PHI node.  */
     996                 :             : #define TREE_ASM_WRITTEN(NODE) ((NODE)->base.asm_written_flag)
     997                 :             : 
     998                 :             : /* Nonzero in a _DECL if the name is used in its scope.
     999                 :             :    Nonzero in an expr node means inhibit warning if value is unused.
    1000                 :             :    In IDENTIFIER_NODEs, this means that some extern decl for this name
    1001                 :             :    was used.
    1002                 :             :    In a BLOCK, this means that the block contains variables that are used.  */
    1003                 :             : #define TREE_USED(NODE) ((NODE)->base.used_flag)
    1004                 :             : 
    1005                 :             : /* In a FUNCTION_DECL, nonzero means a call to the function cannot
    1006                 :             :    throw an exception.  In a CALL_EXPR, nonzero means the call cannot
    1007                 :             :    throw.  We can't easily check the node type here as the C++
    1008                 :             :    frontend also uses this flag (for AGGR_INIT_EXPR).  */
    1009                 :             : #define TREE_NOTHROW(NODE) ((NODE)->base.nothrow_flag)
    1010                 :             : 
    1011                 :             : /* In a CALL_EXPR, means that it's safe to use the target of the call
    1012                 :             :    expansion as the return slot for a call that returns in memory.  */
    1013                 :             : #define CALL_EXPR_RETURN_SLOT_OPT(NODE) \
    1014                 :             :   (CALL_EXPR_CHECK (NODE)->base.private_flag)
    1015                 :             : 
    1016                 :             : /* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that it is
    1017                 :             :    passed by invisible reference (and the TREE_TYPE is a pointer to the true
    1018                 :             :    type).  */
    1019                 :             : #define DECL_BY_REFERENCE(NODE) \
    1020                 :             :   (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \
    1021                 :             :                 RESULT_DECL)->decl_common.decl_by_reference_flag)
    1022                 :             : 
    1023                 :             : /* In VAR_DECL and PARM_DECL, set when the decl has been used except for
    1024                 :             :    being set.  */
    1025                 :             : #define DECL_READ_P(NODE) \
    1026                 :             :   (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_read_flag)
    1027                 :             : 
    1028                 :             : /* In VAR_DECL or RESULT_DECL, set when significant code movement precludes
    1029                 :             :    attempting to share the stack slot with some other variable.  */
    1030                 :             : #define DECL_NONSHAREABLE(NODE) \
    1031                 :             :   (TREE_CHECK2 (NODE, VAR_DECL, \
    1032                 :             :                 RESULT_DECL)->decl_common.decl_nonshareable_flag)
    1033                 :             : 
    1034                 :             : /* In a PARM_DECL, set for Fortran hidden string length arguments that some
    1035                 :             :    buggy callers don't pass to the callee.  */
    1036                 :             : #define DECL_HIDDEN_STRING_LENGTH(NODE) \
    1037                 :             :   (TREE_CHECK (NODE, PARM_DECL)->decl_common.decl_nonshareable_flag)
    1038                 :             : 
    1039                 :             : /* In a CALL_EXPR, means that the call is the jump from a thunk to the
    1040                 :             :    thunked-to function.  Be careful to avoid using this macro when one of the
    1041                 :             :    next two applies instead.  */
    1042                 :             : #define CALL_FROM_THUNK_P(NODE) (CALL_EXPR_CHECK (NODE)->base.protected_flag)
    1043                 :             : 
    1044                 :             : /* In a CALL_EXPR, if the function being called is BUILT_IN_ALLOCA, means that
    1045                 :             :    it has been built for the declaration of a variable-sized object and, if the
    1046                 :             :    function being called is BUILT_IN_MEMCPY, means that it has been built for
    1047                 :             :    the assignment of a variable-sized object.  */
    1048                 :             : #define CALL_ALLOCA_FOR_VAR_P(NODE) \
    1049                 :             :   (CALL_EXPR_CHECK (NODE)->base.protected_flag)
    1050                 :             : 
    1051                 :             : /* In a CALL_EXPR, if the function being called is DECL_IS_OPERATOR_NEW_P or
    1052                 :             :    DECL_IS_OPERATOR_DELETE_P, true for allocator calls from C++ new or delete
    1053                 :             :    expressions.  Not set for C++20 destroying delete operators.  */
    1054                 :             : #define CALL_FROM_NEW_OR_DELETE_P(NODE) \
    1055                 :             :   (CALL_EXPR_CHECK (NODE)->base.protected_flag)
    1056                 :             : 
    1057                 :             : /* Used in classes in C++.  */
    1058                 :             : #define TREE_PRIVATE(NODE) ((NODE)->base.private_flag)
    1059                 :             : /* Used in classes in C++. */
    1060                 :             : #define TREE_PROTECTED(NODE) ((NODE)->base.protected_flag)
    1061                 :             : 
    1062                 :             : /* True if reference type NODE is a C++ rvalue reference.  */
    1063                 :             : #define TYPE_REF_IS_RVALUE(NODE) \
    1064                 :             :   (REFERENCE_TYPE_CHECK (NODE)->base.private_flag)
    1065                 :             : 
    1066                 :             : /* Nonzero in a _DECL if the use of the name is defined as a
    1067                 :             :    deprecated feature by __attribute__((deprecated)).  */
    1068                 :             : #define TREE_DEPRECATED(NODE) \
    1069                 :             :   ((NODE)->base.deprecated_flag)
    1070                 :             : 
    1071                 :             : /* Nonzero in a _DECL if the use of the name is defined as an
    1072                 :             :    unavailable feature by __attribute__((unavailable)).  */
    1073                 :             : #define TREE_UNAVAILABLE(NODE) \
    1074                 :             :   ((NODE)->base.u.bits.unavailable_flag)
    1075                 :             : 
    1076                 :             : /* Nonzero indicates an IDENTIFIER_NODE that names an anonymous
    1077                 :             :    aggregate, (as created by anon_aggr_name_format).  */
    1078                 :             : #define IDENTIFIER_ANON_P(NODE) \
    1079                 :             :   (IDENTIFIER_NODE_CHECK (NODE)->base.private_flag)
    1080                 :             : 
    1081                 :             : /* Nonzero in an IDENTIFIER_NODE if the name is a local alias, whose
    1082                 :             :    uses are to be substituted for uses of the TREE_CHAINed identifier.  */
    1083                 :             : #define IDENTIFIER_TRANSPARENT_ALIAS(NODE) \
    1084                 :             :   (IDENTIFIER_NODE_CHECK (NODE)->base.deprecated_flag)
    1085                 :             : 
    1086                 :             : /* In an aggregate type, indicates that the scalar fields of the type are
    1087                 :             :    stored in reverse order from the target order.  This effectively
    1088                 :             :    toggles BYTES_BIG_ENDIAN and WORDS_BIG_ENDIAN within the type.  */
    1089                 :             : #define TYPE_REVERSE_STORAGE_ORDER(NODE) \
    1090                 :             :   (TREE_CHECK4 (NODE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ARRAY_TYPE)->base.u.bits.saturating_flag)
    1091                 :             : 
    1092                 :             : /* In a non-aggregate type, indicates a saturating type.  */
    1093                 :             : #define TYPE_SATURATING(NODE) \
    1094                 :             :   (TREE_NOT_CHECK4 (NODE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ARRAY_TYPE)->base.u.bits.saturating_flag)
    1095                 :             : 
    1096                 :             : /* In a BIT_FIELD_REF and MEM_REF, indicates that the reference is to a group
    1097                 :             :    of bits stored in reverse order from the target order.  This effectively
    1098                 :             :    toggles both BYTES_BIG_ENDIAN and WORDS_BIG_ENDIAN for the reference.
    1099                 :             : 
    1100                 :             :    The overall strategy is to preserve the invariant that every scalar in
    1101                 :             :    memory is associated with a single storage order, i.e. all accesses to
    1102                 :             :    this scalar are done with the same storage order.  This invariant makes
    1103                 :             :    it possible to factor out the storage order in most transformations, as
    1104                 :             :    only the address and/or the value (in target order) matter for them.
    1105                 :             :    But, of course, the storage order must be preserved when the accesses
    1106                 :             :    themselves are rewritten or transformed.  */
    1107                 :             : #define REF_REVERSE_STORAGE_ORDER(NODE) \
    1108                 :             :   (TREE_CHECK2 (NODE, BIT_FIELD_REF, MEM_REF)->base.default_def_flag)
    1109                 :             : 
    1110                 :             :   /* In an ADDR_EXPR, indicates that this is a pointer to nested function
    1111                 :             :    represented by a descriptor instead of a trampoline.  */
    1112                 :             : #define FUNC_ADDR_BY_DESCRIPTOR(NODE) \
    1113                 :             :   (TREE_CHECK (NODE, ADDR_EXPR)->base.default_def_flag)
    1114                 :             : 
    1115                 :             : /* In a CALL_EXPR, indicates that this is an indirect call for which
    1116                 :             :    pointers to nested function are descriptors instead of trampolines.  */
    1117                 :             : #define CALL_EXPR_BY_DESCRIPTOR(NODE) \
    1118                 :             :   (TREE_CHECK (NODE, CALL_EXPR)->base.default_def_flag)
    1119                 :             : 
    1120                 :             : /* These flags are available for each language front end to use internally.  */
    1121                 :             : #define TREE_LANG_FLAG_0(NODE) \
    1122                 :             :   (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_0)
    1123                 :             : #define TREE_LANG_FLAG_1(NODE) \
    1124                 :             :   (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_1)
    1125                 :             : #define TREE_LANG_FLAG_2(NODE) \
    1126                 :             :   (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_2)
    1127                 :             : #define TREE_LANG_FLAG_3(NODE) \
    1128                 :             :   (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_3)
    1129                 :             : #define TREE_LANG_FLAG_4(NODE) \
    1130                 :             :   (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_4)
    1131                 :             : #define TREE_LANG_FLAG_5(NODE) \
    1132                 :             :   (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_5)
    1133                 :             : #define TREE_LANG_FLAG_6(NODE) \
    1134                 :             :   (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_6)
    1135                 :             : 
    1136                 :             : /* Define additional fields and accessors for nodes representing constants.  */
    1137                 :             : 
    1138                 :             : #define TREE_INT_CST_NUNITS(NODE) \
    1139                 :             :   (INTEGER_CST_CHECK (NODE)->base.u.int_length.unextended)
    1140                 :             : #define TREE_INT_CST_EXT_NUNITS(NODE) \
    1141                 :             :   (INTEGER_CST_CHECK (NODE)->base.u.int_length.extended)
    1142                 :             : #define TREE_INT_CST_ELT(NODE, I) TREE_INT_CST_ELT_CHECK (NODE, I)
    1143                 :             : #define TREE_INT_CST_LOW(NODE) \
    1144                 :             :   ((unsigned HOST_WIDE_INT) TREE_INT_CST_ELT (NODE, 0))
    1145                 :             : 
    1146                 :             : /* Return true if NODE is a POLY_INT_CST.  This is only ever true on
    1147                 :             :    targets with variable-sized modes.  */
    1148                 :             : #define POLY_INT_CST_P(NODE) \
    1149                 :             :   (NUM_POLY_INT_COEFFS > 1 && TREE_CODE (NODE) == POLY_INT_CST)
    1150                 :             : 
    1151                 :             : /* In a POLY_INT_CST node.  */
    1152                 :             : #define POLY_INT_CST_COEFF(NODE, I) \
    1153                 :             :   (POLY_INT_CST_CHECK (NODE)->poly_int_cst.coeffs[I])
    1154                 :             : 
    1155                 :             : #define TREE_REAL_CST_PTR(NODE) (&REAL_CST_CHECK (NODE)->real_cst.value)
    1156                 :             : #define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE))
    1157                 :             : 
    1158                 :             : #define TREE_FIXED_CST_PTR(NODE) \
    1159                 :             :   (FIXED_CST_CHECK (NODE)->fixed_cst.fixed_cst_ptr)
    1160                 :             : #define TREE_FIXED_CST(NODE) (*TREE_FIXED_CST_PTR (NODE))
    1161                 :             : 
    1162                 :             : /* In a STRING_CST */
    1163                 :             : /* In C terms, this is sizeof, not strlen.  */
    1164                 :             : #define TREE_STRING_LENGTH(NODE) (STRING_CST_CHECK (NODE)->string.length)
    1165                 :             : #define TREE_STRING_POINTER(NODE) \
    1166                 :             :   ((const char *)(STRING_CST_CHECK (NODE)->string.str))
    1167                 :             : 
    1168                 :             : /* In a COMPLEX_CST node.  */
    1169                 :             : #define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real)
    1170                 :             : #define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag)
    1171                 :             : 
    1172                 :             : /* In a VECTOR_CST node.  See generic.texi for details.  */
    1173                 :             : #define VECTOR_CST_NELTS(NODE) (TYPE_VECTOR_SUBPARTS (TREE_TYPE (NODE)))
    1174                 :             : #define VECTOR_CST_ELT(NODE,IDX) vector_cst_elt (NODE, IDX)
    1175                 :             : 
    1176                 :             : #define VECTOR_CST_LOG2_NPATTERNS(NODE) \
    1177                 :             :   (VECTOR_CST_CHECK (NODE)->base.u.vector_cst.log2_npatterns)
    1178                 :             : #define VECTOR_CST_NPATTERNS(NODE) \
    1179                 :             :   (1U << VECTOR_CST_LOG2_NPATTERNS (NODE))
    1180                 :             : #define VECTOR_CST_NELTS_PER_PATTERN(NODE) \
    1181                 :             :   (VECTOR_CST_CHECK (NODE)->base.u.vector_cst.nelts_per_pattern)
    1182                 :             : #define VECTOR_CST_DUPLICATE_P(NODE) \
    1183                 :             :   (VECTOR_CST_NELTS_PER_PATTERN (NODE) == 1)
    1184                 :             : #define VECTOR_CST_STEPPED_P(NODE) \
    1185                 :             :   (VECTOR_CST_NELTS_PER_PATTERN (NODE) == 3)
    1186                 :             : #define VECTOR_CST_ENCODED_ELTS(NODE) \
    1187                 :             :   (VECTOR_CST_CHECK (NODE)->vector.elts)
    1188                 :             : #define VECTOR_CST_ENCODED_ELT(NODE, ELT) \
    1189                 :             :   (VECTOR_CST_CHECK (NODE)->vector.elts[ELT])
    1190                 :             : 
    1191                 :             : /* Define fields and accessors for some special-purpose tree nodes.  */
    1192                 :             : 
    1193                 :             : /* Unlike STRING_CST, in C terms this is strlen, not sizeof.  */
    1194                 :             : #define IDENTIFIER_LENGTH(NODE) \
    1195                 :             :   (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
    1196                 :             : #define IDENTIFIER_POINTER(NODE) \
    1197                 :             :   ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
    1198                 :             : #define IDENTIFIER_HASH_VALUE(NODE) \
    1199                 :             :   (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.hash_value)
    1200                 :             : 
    1201                 :             : /* Translate a hash table identifier pointer to a tree_identifier
    1202                 :             :    pointer, and vice versa.  */
    1203                 :             : 
    1204                 :             : #define HT_IDENT_TO_GCC_IDENT(NODE) \
    1205                 :             :   ((tree) ((char *) (NODE) - sizeof (struct tree_common)))
    1206                 :             : #define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id)
    1207                 :             : 
    1208                 :             : /* In a TREE_LIST node.  */
    1209                 :             : #define TREE_PURPOSE(NODE) (TREE_LIST_CHECK (NODE)->list.purpose)
    1210                 :             : #define TREE_VALUE(NODE) (TREE_LIST_CHECK (NODE)->list.value)
    1211                 :             : 
    1212                 :             : /* In a TREE_VEC node.  */
    1213                 :             : #define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->base.u.length)
    1214                 :             : #define TREE_VEC_BEGIN(NODE) (&TREE_VEC_CHECK (NODE)->vec.a[0])
    1215                 :             : #define TREE_VEC_END(NODE) \
    1216                 :             :   ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->base.u.length]))
    1217                 :             : 
    1218                 :             : #define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I)
    1219                 :             : 
    1220                 :             : /* In a CONSTRUCTOR node.  */
    1221                 :             : #define CONSTRUCTOR_ELTS(NODE) (CONSTRUCTOR_CHECK (NODE)->constructor.elts)
    1222                 :             : #define CONSTRUCTOR_ELT(NODE,IDX) \
    1223                 :             :   (&(*CONSTRUCTOR_ELTS (NODE))[IDX])
    1224                 :             : #define CONSTRUCTOR_NELTS(NODE) \
    1225                 :             :   (vec_safe_length (CONSTRUCTOR_ELTS (NODE)))
    1226                 :             : #define CONSTRUCTOR_NO_CLEARING(NODE) \
    1227                 :             :   (CONSTRUCTOR_CHECK (NODE)->base.public_flag)
    1228                 :             : 
    1229                 :             : /* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding the
    1230                 :             :    value of each element (stored within VAL). IX must be a scratch variable
    1231                 :             :    of unsigned integer type.  */
    1232                 :             : #define FOR_EACH_CONSTRUCTOR_VALUE(V, IX, VAL) \
    1233                 :             :   for (IX = 0; (IX >= vec_safe_length (V)) \
    1234                 :             :                ? false \
    1235                 :             :                : ((VAL = (*(V))[IX].value), \
    1236                 :             :                true); \
    1237                 :             :        (IX)++)
    1238                 :             : 
    1239                 :             : /* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding both
    1240                 :             :    the value of each element (stored within VAL) and its index (stored
    1241                 :             :    within INDEX). IX must be a scratch variable of unsigned integer type.  */
    1242                 :             : #define FOR_EACH_CONSTRUCTOR_ELT(V, IX, INDEX, VAL) \
    1243                 :             :   for (IX = 0; (IX >= vec_safe_length (V)) \
    1244                 :             :                ? false \
    1245                 :             :                : (((void) (VAL = (*V)[IX].value)), \
    1246                 :             :                   (INDEX = (*V)[IX].index), \
    1247                 :             :                   true); \
    1248                 :             :        (IX)++)
    1249                 :             : 
    1250                 :             : /* Append a new constructor element to V, with the specified INDEX and VAL.  */
    1251                 :             : #define CONSTRUCTOR_APPEND_ELT(V, INDEX, VALUE) \
    1252                 :             :   do { \
    1253                 :             :     constructor_elt _ce___ = {INDEX, VALUE}; \
    1254                 :             :     vec_safe_push ((V), _ce___); \
    1255                 :             :   } while (0)
    1256                 :             : 
    1257                 :             : /* True if NODE, a FIELD_DECL, is to be processed as a bitfield for
    1258                 :             :    constructor output purposes.  */
    1259                 :             : #define CONSTRUCTOR_BITFIELD_P(NODE) \
    1260                 :             :   (DECL_BIT_FIELD (FIELD_DECL_CHECK (NODE)) \
    1261                 :             :    && (DECL_MODE (NODE) != BLKmode \
    1262                 :             :        || TREE_CODE (TREE_TYPE (NODE)) == BITINT_TYPE))
    1263                 :             : 
    1264                 :             : /* True if NODE is a clobber right hand side, an expression of indeterminate
    1265                 :             :    value that clobbers the LHS in a copy instruction.  We use a volatile
    1266                 :             :    empty CONSTRUCTOR for this, as it matches most of the necessary semantic.
    1267                 :             :    In particular the volatile flag causes us to not prematurely remove
    1268                 :             :    such clobber instructions.  */
    1269                 :             : #define TREE_CLOBBER_P(NODE) \
    1270                 :             :   (TREE_CODE (NODE) == CONSTRUCTOR && TREE_THIS_VOLATILE (NODE))
    1271                 :             : 
    1272                 :             : /* Return the clobber_kind of a CLOBBER CONSTRUCTOR.  */
    1273                 :             : #define CLOBBER_KIND(NODE) \
    1274                 :             :   (CONSTRUCTOR_CHECK (NODE)->base.u.bits.address_space)
    1275                 :             : 
    1276                 :             : /* Define fields and accessors for some nodes that represent expressions.  */
    1277                 :             : 
    1278                 :             : /* Nonzero if NODE is an empty statement (NOP_EXPR <0>).  */
    1279                 :             : #define IS_EMPTY_STMT(NODE)     (TREE_CODE (NODE) == NOP_EXPR \
    1280                 :             :                                  && VOID_TYPE_P (TREE_TYPE (NODE)) \
    1281                 :             :                                  && integer_zerop (TREE_OPERAND (NODE, 0)))
    1282                 :             : 
    1283                 :             : /* In ordinary expression nodes.  */
    1284                 :             : #define TREE_OPERAND_LENGTH(NODE) tree_operand_length (NODE)
    1285                 :             : #define TREE_OPERAND(NODE, I) TREE_OPERAND_CHECK (NODE, I)
    1286                 :             : 
    1287                 :             : /* In a tcc_vl_exp node, operand 0 is an INT_CST node holding the operand
    1288                 :             :    length.  Its value includes the length operand itself; that is,
    1289                 :             :    the minimum valid length is 1.
    1290                 :             :    Note that we have to bypass the use of TREE_OPERAND to access
    1291                 :             :    that field to avoid infinite recursion in expanding the macros.  */
    1292                 :             : #define VL_EXP_OPERAND_LENGTH(NODE) \
    1293                 :             :   ((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0]))
    1294                 :             : 
    1295                 :             : /* Nonzero if gimple_debug_nonbind_marker_p() may possibly hold.  */
    1296                 :             : #define MAY_HAVE_DEBUG_MARKER_STMTS debug_nonbind_markers_p
    1297                 :             : /* Nonzero if gimple_debug_bind_p() (and thus
    1298                 :             :    gimple_debug_source_bind_p()) may possibly hold.  */
    1299                 :             : #define MAY_HAVE_DEBUG_BIND_STMTS flag_var_tracking_assignments
    1300                 :             : /* Nonzero if is_gimple_debug() may possibly hold.  */
    1301                 :             : #define MAY_HAVE_DEBUG_STMTS                                    \
    1302                 :             :   (MAY_HAVE_DEBUG_MARKER_STMTS || MAY_HAVE_DEBUG_BIND_STMTS)
    1303                 :             : 
    1304                 :             : /* In a LOOP_EXPR node.  */
    1305                 :             : #define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0)
    1306                 :             : 
    1307                 :             : /* The source location of this expression.  Non-tree_exp nodes such as
    1308                 :             :    decls and constants can be shared among multiple locations, so
    1309                 :             :    return nothing.  */
    1310                 :             : #define EXPR_LOCATION(NODE) \
    1311                 :             :   (CAN_HAVE_LOCATION_P ((NODE)) ? (NODE)->exp.locus : UNKNOWN_LOCATION)
    1312                 :             : #define SET_EXPR_LOCATION(NODE, LOCUS) EXPR_CHECK ((NODE))->exp.locus = (LOCUS)
    1313                 :             : #define EXPR_HAS_LOCATION(NODE) (LOCATION_LOCUS (EXPR_LOCATION (NODE))  \
    1314                 :             :   != UNKNOWN_LOCATION)
    1315                 :             : /* The location to be used in a diagnostic about this expression.  Do not
    1316                 :             :    use this macro if the location will be assigned to other expressions.  */
    1317                 :             : #define EXPR_LOC_OR_LOC(NODE, LOCUS) (EXPR_HAS_LOCATION (NODE) \
    1318                 :             :                                       ? (NODE)->exp.locus : (LOCUS))
    1319                 :             : #define EXPR_FILENAME(NODE) LOCATION_FILE (EXPR_CHECK ((NODE))->exp.locus)
    1320                 :             : #define EXPR_LINENO(NODE) LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus)
    1321                 :             : 
    1322                 :             : #define CAN_HAVE_RANGE_P(NODE) (CAN_HAVE_LOCATION_P (NODE))
    1323                 :             : #define EXPR_LOCATION_RANGE(NODE) (get_expr_source_range (EXPR_CHECK ((NODE))))
    1324                 :             : 
    1325                 :             : #define EXPR_HAS_RANGE(NODE) \
    1326                 :             :     (CAN_HAVE_RANGE_P (NODE) \
    1327                 :             :      ? EXPR_LOCATION_RANGE (NODE).m_start != UNKNOWN_LOCATION \
    1328                 :             :      : false)
    1329                 :             : 
    1330                 :             : /* True if a tree is an expression or statement that can have a
    1331                 :             :    location.  */
    1332                 :             : #define CAN_HAVE_LOCATION_P(NODE) ((NODE) && EXPR_P (NODE))
    1333                 :             : 
    1334                 :             : inline source_range
    1335                 :   226142757 : get_expr_source_range (tree expr)
    1336                 :             : {
    1337                 :   226142757 :   location_t loc = EXPR_LOCATION (expr);
    1338                 :   226142757 :   return get_range_from_loc (line_table, loc);
    1339                 :             : }
    1340                 :             : 
    1341                 :             : extern void protected_set_expr_location (tree, location_t);
    1342                 :             : extern void protected_set_expr_location_if_unset (tree, location_t);
    1343                 :             : ATTRIBUTE_WARN_UNUSED_RESULT
    1344                 :             : extern tree protected_set_expr_location_unshare (tree, location_t);
    1345                 :             : 
    1346                 :             : WARN_UNUSED_RESULT extern tree maybe_wrap_with_location (tree, location_t);
    1347                 :             : 
    1348                 :             : extern int suppress_location_wrappers;
    1349                 :             : 
    1350                 :             : /* A class for suppressing the creation of location wrappers.
    1351                 :             :    Location wrappers will not be created during the lifetime
    1352                 :             :    of an instance of this class.  */
    1353                 :             : 
    1354                 :             : class auto_suppress_location_wrappers
    1355                 :             : {
    1356                 :             :  public:
    1357                 :  1401373214 :   auto_suppress_location_wrappers () { ++suppress_location_wrappers; }
    1358                 :         341 :   ~auto_suppress_location_wrappers () { --suppress_location_wrappers; }
    1359                 :             : };
    1360                 :             : 
    1361                 :             : /* COND_EXPR identificer/discriminator accessors.  */
    1362                 :             : #define SET_EXPR_UID(t, v) EXPR_CHECK ((t))->exp.condition_uid = (v)
    1363                 :             : #define EXPR_COND_UID(t) EXPR_CHECK ((t))->exp.condition_uid
    1364                 :             : 
    1365                 :             : /* In a TARGET_EXPR node.  */
    1366                 :             : #define TARGET_EXPR_SLOT(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 0)
    1367                 :             : #define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1)
    1368                 :             : #define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 2)
    1369                 :             : /* Don't elide the initialization of TARGET_EXPR_SLOT for this TARGET_EXPR
    1370                 :             :    on rhs of MODIFY_EXPR.  */
    1371                 :             : #define TARGET_EXPR_NO_ELIDE(NODE) (TARGET_EXPR_CHECK (NODE)->base.private_flag)
    1372                 :             : 
    1373                 :             : /* DECL_EXPR accessor. This gives access to the DECL associated with
    1374                 :             :    the given declaration statement.  */
    1375                 :             : #define DECL_EXPR_DECL(NODE)    TREE_OPERAND (DECL_EXPR_CHECK (NODE), 0)
    1376                 :             : 
    1377                 :             : #define EXIT_EXPR_COND(NODE)         TREE_OPERAND (EXIT_EXPR_CHECK (NODE), 0)
    1378                 :             : 
    1379                 :             : /* COMPOUND_LITERAL_EXPR accessors.  */
    1380                 :             : #define COMPOUND_LITERAL_EXPR_DECL_EXPR(NODE)           \
    1381                 :             :   TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
    1382                 :             : #define COMPOUND_LITERAL_EXPR_DECL(NODE)                        \
    1383                 :             :   DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_EXPR (NODE))
    1384                 :             : 
    1385                 :             : /* SWITCH_EXPR accessors. These give access to the condition and body.  */
    1386                 :             : #define SWITCH_COND(NODE)       TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 0)
    1387                 :             : #define SWITCH_BODY(NODE)       TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 1)
    1388                 :             : /* True if there are case labels for all possible values of SWITCH_COND, either
    1389                 :             :    because there is a default: case label or because the case label ranges cover
    1390                 :             :    all values.  */
    1391                 :             : #define SWITCH_ALL_CASES_P(NODE) (SWITCH_EXPR_CHECK (NODE)->base.private_flag)
    1392                 :             : 
    1393                 :             : /* CASE_LABEL_EXPR accessors. These give access to the high and low values
    1394                 :             :    of a case label, respectively.  */
    1395                 :             : #define CASE_LOW(NODE)                  TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0)
    1396                 :             : #define CASE_HIGH(NODE)                 TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1)
    1397                 :             : #define CASE_LABEL(NODE)                TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 2)
    1398                 :             : #define CASE_CHAIN(NODE)                TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 3)
    1399                 :             : 
    1400                 :             : /* The operands of a TARGET_MEM_REF.  Operands 0 and 1 have to match
    1401                 :             :    corresponding MEM_REF operands.  */
    1402                 :             : #define TMR_BASE(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 0))
    1403                 :             : #define TMR_OFFSET(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 1))
    1404                 :             : #define TMR_INDEX(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 2))
    1405                 :             : #define TMR_STEP(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 3))
    1406                 :             : #define TMR_INDEX2(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 4))
    1407                 :             : 
    1408                 :             : #define MR_DEPENDENCE_CLIQUE(NODE) \
    1409                 :             :   (TREE_CHECK2 (NODE, MEM_REF, TARGET_MEM_REF)->base.u.dependence_info.clique)
    1410                 :             : #define MR_DEPENDENCE_BASE(NODE) \
    1411                 :             :   (TREE_CHECK2 (NODE, MEM_REF, TARGET_MEM_REF)->base.u.dependence_info.base)
    1412                 :             : 
    1413                 :             : /* The operands of a BIND_EXPR.  */
    1414                 :             : #define BIND_EXPR_VARS(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 0))
    1415                 :             : #define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1))
    1416                 :             : #define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2))
    1417                 :             : 
    1418                 :             : /* GOTO_EXPR accessor. This gives access to the label associated with
    1419                 :             :    a goto statement.  */
    1420                 :             : #define GOTO_DESTINATION(NODE)  TREE_OPERAND (GOTO_EXPR_CHECK (NODE), 0)
    1421                 :             : 
    1422                 :             : /* ASM_EXPR accessors. ASM_STRING returns a STRING_CST for the
    1423                 :             :    instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and
    1424                 :             :    ASM_CLOBBERS represent the outputs, inputs, and clobbers for the
    1425                 :             :    statement.  */
    1426                 :             : #define ASM_STRING(NODE)        TREE_OPERAND (ASM_EXPR_CHECK (NODE), 0)
    1427                 :             : #define ASM_OUTPUTS(NODE)       TREE_OPERAND (ASM_EXPR_CHECK (NODE), 1)
    1428                 :             : #define ASM_INPUTS(NODE)        TREE_OPERAND (ASM_EXPR_CHECK (NODE), 2)
    1429                 :             : #define ASM_CLOBBERS(NODE)      TREE_OPERAND (ASM_EXPR_CHECK (NODE), 3)
    1430                 :             : #define ASM_LABELS(NODE)        TREE_OPERAND (ASM_EXPR_CHECK (NODE), 4)
    1431                 :             : /* Nonzero if we want to create an ASM_INPUT instead of an
    1432                 :             :    ASM_OPERAND with no operands.  */
    1433                 :             : #define ASM_INPUT_P(NODE) (ASM_EXPR_CHECK (NODE)->base.static_flag)
    1434                 :             : #define ASM_VOLATILE_P(NODE) (ASM_EXPR_CHECK (NODE)->base.public_flag)
    1435                 :             : /* Nonzero if we want to consider this asm as minimum length and cost
    1436                 :             :    for inlining decisions.  */
    1437                 :             : #define ASM_INLINE_P(NODE) (ASM_EXPR_CHECK (NODE)->base.protected_flag)
    1438                 :             : 
    1439                 :             : /* COND_EXPR accessors.  */
    1440                 :             : #define COND_EXPR_COND(NODE)    (TREE_OPERAND (COND_EXPR_CHECK (NODE), 0))
    1441                 :             : #define COND_EXPR_THEN(NODE)    (TREE_OPERAND (COND_EXPR_CHECK (NODE), 1))
    1442                 :             : #define COND_EXPR_ELSE(NODE)    (TREE_OPERAND (COND_EXPR_CHECK (NODE), 2))
    1443                 :             : 
    1444                 :             : /* Accessors for the chains of recurrences.  */
    1445                 :             : #define CHREC_LEFT(NODE)        TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 0)
    1446                 :             : #define CHREC_RIGHT(NODE)       TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 1)
    1447                 :             : #define CHREC_VARIABLE(NODE)    POLYNOMIAL_CHREC_CHECK (NODE)->base.u.chrec_var
    1448                 :             : /* Nonzero if this chrec doesn't overflow (i.e., nonwrapping).  */
    1449                 :             : #define CHREC_NOWRAP(NODE)      POLYNOMIAL_CHREC_CHECK (NODE)->base.nothrow_flag
    1450                 :             : 
    1451                 :             : /* LABEL_EXPR accessor. This gives access to the label associated with
    1452                 :             :    the given label expression.  */
    1453                 :             : #define LABEL_EXPR_LABEL(NODE)  TREE_OPERAND (LABEL_EXPR_CHECK (NODE), 0)
    1454                 :             : 
    1455                 :             : /* CATCH_EXPR accessors.  */
    1456                 :             : #define CATCH_TYPES(NODE)       TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 0)
    1457                 :             : #define CATCH_BODY(NODE)        TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 1)
    1458                 :             : 
    1459                 :             : /* EH_FILTER_EXPR accessors.  */
    1460                 :             : #define EH_FILTER_TYPES(NODE)   TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 0)
    1461                 :             : #define EH_FILTER_FAILURE(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 1)
    1462                 :             : 
    1463                 :             : /* OBJ_TYPE_REF accessors.  */
    1464                 :             : #define OBJ_TYPE_REF_EXPR(NODE)   TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 0)
    1465                 :             : #define OBJ_TYPE_REF_OBJECT(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 1)
    1466                 :             : #define OBJ_TYPE_REF_TOKEN(NODE)  TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 2)
    1467                 :             : 
    1468                 :             : /* CALL_EXPR accessors.  */
    1469                 :             : #define CALL_EXPR_FN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 1)
    1470                 :             : #define CALL_EXPR_STATIC_CHAIN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 2)
    1471                 :             : #define CALL_EXPR_ARG(NODE, I) TREE_OPERAND (CALL_EXPR_CHECK (NODE), (I) + 3)
    1472                 :             : #define call_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH (NODE) - 3)
    1473                 :             : #define CALL_EXPR_IFN(NODE) (CALL_EXPR_CHECK (NODE)->base.u.ifn)
    1474                 :             : 
    1475                 :             : /* CALL_EXPR_ARGP returns a pointer to the argument vector for NODE.
    1476                 :             :    We can't use &CALL_EXPR_ARG (NODE, 0) because that will complain if
    1477                 :             :    the argument count is zero when checking is enabled.  Instead, do
    1478                 :             :    the pointer arithmetic to advance past the 3 fixed operands in a
    1479                 :             :    CALL_EXPR.  That produces a valid pointer to just past the end of the
    1480                 :             :    operand array, even if it's not valid to dereference it.  */
    1481                 :             : #define CALL_EXPR_ARGP(NODE) \
    1482                 :             :   (&(TREE_OPERAND (CALL_EXPR_CHECK (NODE), 0)) + 3)
    1483                 :             : 
    1484                 :             : /* TM directives and accessors.  */
    1485                 :             : #define TRANSACTION_EXPR_BODY(NODE) \
    1486                 :             :   TREE_OPERAND (TRANSACTION_EXPR_CHECK (NODE), 0)
    1487                 :             : #define TRANSACTION_EXPR_OUTER(NODE) \
    1488                 :             :   (TRANSACTION_EXPR_CHECK (NODE)->base.static_flag)
    1489                 :             : #define TRANSACTION_EXPR_RELAXED(NODE) \
    1490                 :             :   (TRANSACTION_EXPR_CHECK (NODE)->base.public_flag)
    1491                 :             : 
    1492                 :             : /* OpenMP and OpenACC directive and clause accessors.  */
    1493                 :             : 
    1494                 :             : /* Generic accessors for OMP nodes that keep the body as operand 0, and clauses
    1495                 :             :    as operand 1.  */
    1496                 :             : #define OMP_BODY(NODE) \
    1497                 :             :   TREE_OPERAND (TREE_RANGE_CHECK (NODE, OACC_PARALLEL, OMP_MASTER), 0)
    1498                 :             : #define OMP_CLAUSES(NODE) \
    1499                 :             :   TREE_OPERAND (TREE_RANGE_CHECK (NODE, OACC_PARALLEL, OMP_SCAN), 1)
    1500                 :             : 
    1501                 :             : /* Generic accessors for OMP nodes that keep clauses as operand 0.  */
    1502                 :             : #define OMP_STANDALONE_CLAUSES(NODE) \
    1503                 :             :   TREE_OPERAND (TREE_RANGE_CHECK (NODE, OACC_CACHE, OMP_TARGET_EXIT_DATA), 0)
    1504                 :             : 
    1505                 :             : #define OACC_DATA_BODY(NODE) \
    1506                 :             :   TREE_OPERAND (OACC_DATA_CHECK (NODE), 0)
    1507                 :             : #define OACC_DATA_CLAUSES(NODE) \
    1508                 :             :   TREE_OPERAND (OACC_DATA_CHECK (NODE), 1)
    1509                 :             : 
    1510                 :             : #define OACC_HOST_DATA_BODY(NODE) \
    1511                 :             :   TREE_OPERAND (OACC_HOST_DATA_CHECK (NODE), 0)
    1512                 :             : #define OACC_HOST_DATA_CLAUSES(NODE) \
    1513                 :             :   TREE_OPERAND (OACC_HOST_DATA_CHECK (NODE), 1)
    1514                 :             : 
    1515                 :             : #define OACC_CACHE_CLAUSES(NODE) \
    1516                 :             :   TREE_OPERAND (OACC_CACHE_CHECK (NODE), 0)
    1517                 :             : 
    1518                 :             : #define OACC_DECLARE_CLAUSES(NODE) \
    1519                 :             :   TREE_OPERAND (OACC_DECLARE_CHECK (NODE), 0)
    1520                 :             : 
    1521                 :             : #define OACC_ENTER_DATA_CLAUSES(NODE) \
    1522                 :             :   TREE_OPERAND (OACC_ENTER_DATA_CHECK (NODE), 0)
    1523                 :             : 
    1524                 :             : #define OACC_EXIT_DATA_CLAUSES(NODE) \
    1525                 :             :   TREE_OPERAND (OACC_EXIT_DATA_CHECK (NODE), 0)
    1526                 :             : 
    1527                 :             : #define OACC_UPDATE_CLAUSES(NODE) \
    1528                 :             :   TREE_OPERAND (OACC_UPDATE_CHECK (NODE), 0)
    1529                 :             : 
    1530                 :             : #define OMP_PARALLEL_BODY(NODE)    TREE_OPERAND (OMP_PARALLEL_CHECK (NODE), 0)
    1531                 :             : #define OMP_PARALLEL_CLAUSES(NODE) TREE_OPERAND (OMP_PARALLEL_CHECK (NODE), 1)
    1532                 :             : 
    1533                 :             : #define OMP_TASK_BODY(NODE)        TREE_OPERAND (OMP_TASK_CHECK (NODE), 0)
    1534                 :             : #define OMP_TASK_CLAUSES(NODE)     TREE_OPERAND (OMP_TASK_CHECK (NODE), 1)
    1535                 :             : 
    1536                 :             : #define OMP_TASKREG_CHECK(NODE)   TREE_RANGE_CHECK (NODE, OMP_PARALLEL, OMP_TASK)
    1537                 :             : #define OMP_TASKREG_BODY(NODE)    TREE_OPERAND (OMP_TASKREG_CHECK (NODE), 0)
    1538                 :             : #define OMP_TASKREG_CLAUSES(NODE) TREE_OPERAND (OMP_TASKREG_CHECK (NODE), 1)
    1539                 :             : 
    1540                 :             : #define OMP_LOOPING_CHECK(NODE) TREE_RANGE_CHECK (NODE, OMP_FOR, OACC_LOOP)
    1541                 :             : #define OMP_FOR_BODY(NODE)         TREE_OPERAND (OMP_LOOPING_CHECK (NODE), 0)
    1542                 :             : #define OMP_FOR_CLAUSES(NODE)      TREE_OPERAND (OMP_LOOPING_CHECK (NODE), 1)
    1543                 :             : #define OMP_FOR_INIT(NODE)         TREE_OPERAND (OMP_LOOPING_CHECK (NODE), 2)
    1544                 :             : #define OMP_FOR_COND(NODE)         TREE_OPERAND (OMP_LOOPING_CHECK (NODE), 3)
    1545                 :             : #define OMP_FOR_INCR(NODE)         TREE_OPERAND (OMP_LOOPING_CHECK (NODE), 4)
    1546                 :             : #define OMP_FOR_PRE_BODY(NODE)     TREE_OPERAND (OMP_LOOPING_CHECK (NODE), 5)
    1547                 :             : #define OMP_FOR_ORIG_DECLS(NODE)   TREE_OPERAND (OMP_LOOPING_CHECK (NODE), 6)
    1548                 :             : 
    1549                 :             : #define OMP_SECTIONS_BODY(NODE)    TREE_OPERAND (OMP_SECTIONS_CHECK (NODE), 0)
    1550                 :             : #define OMP_SECTIONS_CLAUSES(NODE) TREE_OPERAND (OMP_SECTIONS_CHECK (NODE), 1)
    1551                 :             : 
    1552                 :             : #define OMP_SECTION_BODY(NODE)     TREE_OPERAND (OMP_SECTION_CHECK (NODE), 0)
    1553                 :             : 
    1554                 :             : #define OMP_STRUCTURED_BLOCK_BODY(NODE) \
    1555                 :             :   TREE_OPERAND (OMP_STRUCTURED_BLOCK_CHECK (NODE), 0)
    1556                 :             : 
    1557                 :             : #define OMP_SINGLE_BODY(NODE)      TREE_OPERAND (OMP_SINGLE_CHECK (NODE), 0)
    1558                 :             : #define OMP_SINGLE_CLAUSES(NODE)   TREE_OPERAND (OMP_SINGLE_CHECK (NODE), 1)
    1559                 :             : 
    1560                 :             : #define OMP_SCOPE_BODY(NODE)       TREE_OPERAND (OMP_SCOPE_CHECK (NODE), 0)
    1561                 :             : #define OMP_SCOPE_CLAUSES(NODE)    TREE_OPERAND (OMP_SCOPE_CHECK (NODE), 1)
    1562                 :             : 
    1563                 :             : #define OMP_MASTER_BODY(NODE)      TREE_OPERAND (OMP_MASTER_CHECK (NODE), 0)
    1564                 :             : 
    1565                 :             : #define OMP_MASKED_BODY(NODE)      TREE_OPERAND (OMP_MASKED_CHECK (NODE), 0)
    1566                 :             : #define OMP_MASKED_CLAUSES(NODE)   TREE_OPERAND (OMP_MASKED_CHECK (NODE), 1)
    1567                 :             : 
    1568                 :             : #define OMP_TASKGROUP_BODY(NODE)   TREE_OPERAND (OMP_TASKGROUP_CHECK (NODE), 0)
    1569                 :             : #define OMP_TASKGROUP_CLAUSES(NODE) \
    1570                 :             :   TREE_OPERAND (OMP_TASKGROUP_CHECK (NODE), 1)
    1571                 :             : 
    1572                 :             : #define OMP_ORDERED_BODY(NODE)     TREE_OPERAND (OMP_ORDERED_CHECK (NODE), 0)
    1573                 :             : #define OMP_ORDERED_CLAUSES(NODE)  TREE_OPERAND (OMP_ORDERED_CHECK (NODE), 1)
    1574                 :             : 
    1575                 :             : #define OMP_CRITICAL_BODY(NODE)    TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 0)
    1576                 :             : #define OMP_CRITICAL_CLAUSES(NODE) TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 1)
    1577                 :             : #define OMP_CRITICAL_NAME(NODE)    TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 2)
    1578                 :             : 
    1579                 :             : #define OMP_TEAMS_BODY(NODE)       TREE_OPERAND (OMP_TEAMS_CHECK (NODE), 0)
    1580                 :             : #define OMP_TEAMS_CLAUSES(NODE)    TREE_OPERAND (OMP_TEAMS_CHECK (NODE), 1)
    1581                 :             : 
    1582                 :             : #define OMP_TARGET_DATA_BODY(NODE) \
    1583                 :             :   TREE_OPERAND (OMP_TARGET_DATA_CHECK (NODE), 0)
    1584                 :             : #define OMP_TARGET_DATA_CLAUSES(NODE)\
    1585                 :             :   TREE_OPERAND (OMP_TARGET_DATA_CHECK (NODE), 1)
    1586                 :             : 
    1587                 :             : #define OMP_TARGET_BODY(NODE)      TREE_OPERAND (OMP_TARGET_CHECK (NODE), 0)
    1588                 :             : #define OMP_TARGET_CLAUSES(NODE)   TREE_OPERAND (OMP_TARGET_CHECK (NODE), 1)
    1589                 :             : 
    1590                 :             : #define OMP_TARGET_UPDATE_CLAUSES(NODE)\
    1591                 :             :   TREE_OPERAND (OMP_TARGET_UPDATE_CHECK (NODE), 0)
    1592                 :             : 
    1593                 :             : #define OMP_TARGET_ENTER_DATA_CLAUSES(NODE)\
    1594                 :             :   TREE_OPERAND (OMP_TARGET_ENTER_DATA_CHECK (NODE), 0)
    1595                 :             : 
    1596                 :             : #define OMP_TARGET_EXIT_DATA_CLAUSES(NODE)\
    1597                 :             :   TREE_OPERAND (OMP_TARGET_EXIT_DATA_CHECK (NODE), 0)
    1598                 :             : 
    1599                 :             : #define OMP_SCAN_BODY(NODE)     TREE_OPERAND (OMP_SCAN_CHECK (NODE), 0)
    1600                 :             : #define OMP_SCAN_CLAUSES(NODE)  TREE_OPERAND (OMP_SCAN_CHECK (NODE), 1)
    1601                 :             : 
    1602                 :             : #define OMP_CLAUSE_SIZE(NODE)                                           \
    1603                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (OMP_CLAUSE_CHECK (NODE),  \
    1604                 :             :                                               OMP_CLAUSE_FROM,          \
    1605                 :             :                                               OMP_CLAUSE__CACHE_), 1)
    1606                 :             : 
    1607                 :             : #define OMP_CLAUSE_CHAIN(NODE)     TREE_CHAIN (OMP_CLAUSE_CHECK (NODE))
    1608                 :             : #define OMP_CLAUSE_DECL(NODE)                                           \
    1609                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (OMP_CLAUSE_CHECK (NODE),  \
    1610                 :             :                                               OMP_CLAUSE_PRIVATE,       \
    1611                 :             :                                               OMP_CLAUSE__SCANTEMP_), 0)
    1612                 :             : #define OMP_CLAUSE_HAS_LOCATION(NODE) \
    1613                 :             :   (LOCATION_LOCUS ((OMP_CLAUSE_CHECK (NODE))->omp_clause.locus)              \
    1614                 :             :   != UNKNOWN_LOCATION)
    1615                 :             : #define OMP_CLAUSE_LOCATION(NODE)  (OMP_CLAUSE_CHECK (NODE))->omp_clause.locus
    1616                 :             : 
    1617                 :             : /* True on OMP_FOR and other OpenMP/OpenACC looping constructs if the loop nest
    1618                 :             :    is non-rectangular.  */
    1619                 :             : #define OMP_FOR_NON_RECTANGULAR(NODE) \
    1620                 :             :   (OMP_LOOPING_CHECK (NODE)->base.private_flag)
    1621                 :             : 
    1622                 :             : /* True on an OMP_SECTION statement that was the last lexical member.
    1623                 :             :    This status is meaningful in the implementation of lastprivate.  */
    1624                 :             : #define OMP_SECTION_LAST(NODE) \
    1625                 :             :   (OMP_SECTION_CHECK (NODE)->base.private_flag)
    1626                 :             : 
    1627                 :             : /* True on an OMP_PARALLEL statement if it represents an explicit
    1628                 :             :    combined parallel work-sharing constructs.  */
    1629                 :             : #define OMP_PARALLEL_COMBINED(NODE) \
    1630                 :             :   (OMP_PARALLEL_CHECK (NODE)->base.private_flag)
    1631                 :             : 
    1632                 :             : /* True on an OMP_TEAMS statement if it represents an explicit
    1633                 :             :    combined teams distribute constructs.  */
    1634                 :             : #define OMP_TEAMS_COMBINED(NODE) \
    1635                 :             :   (OMP_TEAMS_CHECK (NODE)->base.private_flag)
    1636                 :             : 
    1637                 :             : /* True on an OMP_TARGET statement if it represents explicit
    1638                 :             :    combined target teams, target parallel or target simd constructs.  */
    1639                 :             : #define OMP_TARGET_COMBINED(NODE) \
    1640                 :             :   (OMP_TARGET_CHECK (NODE)->base.private_flag)
    1641                 :             : 
    1642                 :             : /* True on an OMP_MASTER statement if it represents an explicit
    1643                 :             :    combined master constructs.  */
    1644                 :             : #define OMP_MASTER_COMBINED(NODE) \
    1645                 :             :   (OMP_MASTER_CHECK (NODE)->base.private_flag)
    1646                 :             : 
    1647                 :             : /* True on an OMP_MASKED statement if it represents an explicit
    1648                 :             :    combined masked constructs.  */
    1649                 :             : #define OMP_MASKED_COMBINED(NODE) \
    1650                 :             :   (OMP_MASKED_CHECK (NODE)->base.private_flag)
    1651                 :             : 
    1652                 :             : /* Memory order for OMP_ATOMIC*.  */
    1653                 :             : #define OMP_ATOMIC_MEMORY_ORDER(NODE) \
    1654                 :             :   (TREE_RANGE_CHECK (NODE, OMP_ATOMIC, \
    1655                 :             :                      OMP_ATOMIC_CAPTURE_NEW)->base.u.omp_atomic_memory_order)
    1656                 :             : 
    1657                 :             : /* Weak clause on OMP_ATOMIC*.  */
    1658                 :             : #define OMP_ATOMIC_WEAK(NODE) \
    1659                 :             :   (TREE_RANGE_CHECK (NODE, OMP_ATOMIC, \
    1660                 :             :                      OMP_ATOMIC_CAPTURE_NEW)->base.public_flag)
    1661                 :             : 
    1662                 :             : /* True on a PRIVATE clause if its decl is kept around for debugging
    1663                 :             :    information only and its DECL_VALUE_EXPR is supposed to point
    1664                 :             :    to what it has been remapped to.  */
    1665                 :             : #define OMP_CLAUSE_PRIVATE_DEBUG(NODE) \
    1666                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE)->base.public_flag)
    1667                 :             : 
    1668                 :             : /* True on a PRIVATE clause if ctor needs access to outer region's
    1669                 :             :    variable.  */
    1670                 :             : #define OMP_CLAUSE_PRIVATE_OUTER_REF(NODE) \
    1671                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE))
    1672                 :             : 
    1673                 :             : /* True if a PRIVATE clause is for a C++ class IV on taskloop construct
    1674                 :             :    (thus should be private on the outer taskloop and firstprivate on
    1675                 :             :    task).  */
    1676                 :             : #define OMP_CLAUSE_PRIVATE_TASKLOOP_IV(NODE) \
    1677                 :             :   TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE))
    1678                 :             : 
    1679                 :             : /* True on a FIRSTPRIVATE clause if it has been added implicitly.  */
    1680                 :             : #define OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT(NODE) \
    1681                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FIRSTPRIVATE)->base.public_flag)
    1682                 :             : 
    1683                 :             : /* True on a FIRSTPRIVATE clause if only the reference and not what it refers
    1684                 :             :    to should be firstprivatized.  */
    1685                 :             : #define OMP_CLAUSE_FIRSTPRIVATE_NO_REFERENCE(NODE) \
    1686                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FIRSTPRIVATE))
    1687                 :             : 
    1688                 :             : /* True on a FIRSTPRIVATE clause with OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT also
    1689                 :             :    set if target construct is the only one that accepts the clause.  */
    1690                 :             : #define OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET(NODE) \
    1691                 :             :   TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FIRSTPRIVATE))
    1692                 :             : 
    1693                 :             : /* True on a LASTPRIVATE clause if a FIRSTPRIVATE clause for the same
    1694                 :             :    decl is present in the chain.  */
    1695                 :             : #define OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE(NODE) \
    1696                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LASTPRIVATE)->base.public_flag)
    1697                 :             : #define OMP_CLAUSE_LASTPRIVATE_STMT(NODE) \
    1698                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE,                   \
    1699                 :             :                                                 OMP_CLAUSE_LASTPRIVATE),\
    1700                 :             :                       1)
    1701                 :             : #define OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ(NODE) \
    1702                 :             :   (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
    1703                 :             : 
    1704                 :             : /* True if a LASTPRIVATE clause is for a C++ class IV on taskloop or
    1705                 :             :    loop construct (thus should be lastprivate on the outer taskloop and
    1706                 :             :    firstprivate on task for the taskloop construct and carefully handled
    1707                 :             :    for loop construct).  */
    1708                 :             : #define OMP_CLAUSE_LASTPRIVATE_LOOP_IV(NODE) \
    1709                 :             :   TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LASTPRIVATE))
    1710                 :             : 
    1711                 :             : /* True if a LASTPRIVATE clause has CONDITIONAL: modifier.  */
    1712                 :             : #define OMP_CLAUSE_LASTPRIVATE_CONDITIONAL(NODE) \
    1713                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LASTPRIVATE))
    1714                 :             : 
    1715                 :             : /* True on a SHARED clause if a FIRSTPRIVATE clause for the same
    1716                 :             :    decl is present in the chain (this can happen only for taskloop
    1717                 :             :    with FIRSTPRIVATE/LASTPRIVATE on it originally.  */
    1718                 :             : #define OMP_CLAUSE_SHARED_FIRSTPRIVATE(NODE) \
    1719                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SHARED)->base.public_flag)
    1720                 :             : 
    1721                 :             : /* True on a SHARED clause if a scalar is not modified in the body and
    1722                 :             :    thus could be optimized as firstprivate.  */
    1723                 :             : #define OMP_CLAUSE_SHARED_READONLY(NODE) \
    1724                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SHARED))
    1725                 :             : 
    1726                 :             : #define OMP_CLAUSE_IF_MODIFIER(NODE)    \
    1727                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_IF)->omp_clause.subcode.if_modifier)
    1728                 :             : 
    1729                 :             : #define OMP_CLAUSE_FINAL_EXPR(NODE) \
    1730                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FINAL), 0)
    1731                 :             : #define OMP_CLAUSE_IF_EXPR(NODE) \
    1732                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_IF), 0)
    1733                 :             : #define OMP_CLAUSE_SELF_EXPR(NODE) \
    1734                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SELF), 0)
    1735                 :             : #define OMP_CLAUSE_NUM_THREADS_EXPR(NODE) \
    1736                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_THREADS),0)
    1737                 :             : #define OMP_CLAUSE_SCHEDULE_CHUNK_EXPR(NODE) \
    1738                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE), 0)
    1739                 :             : #define OMP_CLAUSE_NUM_TASKS_EXPR(NODE) \
    1740                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_TASKS), 0)
    1741                 :             : #define OMP_CLAUSE_HINT_EXPR(NODE) \
    1742                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_HINT), 0)
    1743                 :             : #define OMP_CLAUSE_FILTER_EXPR(NODE) \
    1744                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FILTER), 0)
    1745                 :             : 
    1746                 :             : #define OMP_CLAUSE_GRAINSIZE_EXPR(NODE) \
    1747                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_GRAINSIZE),0)
    1748                 :             : 
    1749                 :             : #define OMP_CLAUSE_PRIORITY_EXPR(NODE) \
    1750                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIORITY),0)
    1751                 :             : 
    1752                 :             : #define OMP_CLAUSE_GRAINSIZE_STRICT(NODE) \
    1753                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_GRAINSIZE))
    1754                 :             : #define OMP_CLAUSE_NUM_TASKS_STRICT(NODE) \
    1755                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_TASKS))
    1756                 :             : 
    1757                 :             : /* OpenACC clause expressions  */
    1758                 :             : #define OMP_CLAUSE_EXPR(NODE, CLAUSE) \
    1759                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, CLAUSE), 0)
    1760                 :             : #define OMP_CLAUSE_GANG_EXPR(NODE) \
    1761                 :             :   OMP_CLAUSE_OPERAND ( \
    1762                 :             :     OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_GANG), 0)
    1763                 :             : #define OMP_CLAUSE_GANG_STATIC_EXPR(NODE) \
    1764                 :             :   OMP_CLAUSE_OPERAND ( \
    1765                 :             :     OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_GANG), 1)
    1766                 :             : #define OMP_CLAUSE_ASYNC_EXPR(NODE) \
    1767                 :             :   OMP_CLAUSE_OPERAND ( \
    1768                 :             :     OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ASYNC), 0)
    1769                 :             : #define OMP_CLAUSE_WAIT_EXPR(NODE) \
    1770                 :             :   OMP_CLAUSE_OPERAND ( \
    1771                 :             :     OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_WAIT), 0)
    1772                 :             : #define OMP_CLAUSE_VECTOR_EXPR(NODE) \
    1773                 :             :   OMP_CLAUSE_OPERAND ( \
    1774                 :             :     OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_VECTOR), 0)
    1775                 :             : #define OMP_CLAUSE_WORKER_EXPR(NODE) \
    1776                 :             :   OMP_CLAUSE_OPERAND ( \
    1777                 :             :     OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_WORKER), 0)
    1778                 :             : #define OMP_CLAUSE_NUM_GANGS_EXPR(NODE) \
    1779                 :             :   OMP_CLAUSE_OPERAND ( \
    1780                 :             :     OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_GANGS), 0)
    1781                 :             : #define OMP_CLAUSE_NUM_WORKERS_EXPR(NODE) \
    1782                 :             :   OMP_CLAUSE_OPERAND ( \
    1783                 :             :     OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_WORKERS), 0)
    1784                 :             : #define OMP_CLAUSE_VECTOR_LENGTH_EXPR(NODE) \
    1785                 :             :   OMP_CLAUSE_OPERAND ( \
    1786                 :             :     OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_VECTOR_LENGTH), 0)
    1787                 :             : 
    1788                 :             : #define OMP_CLAUSE_DEPEND_KIND(NODE) \
    1789                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEPEND)->omp_clause.subcode.depend_kind)
    1790                 :             : 
    1791                 :             : #define OMP_CLAUSE_DOACROSS_KIND(NODE) \
    1792                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DOACROSS)->omp_clause.subcode.doacross_kind)
    1793                 :             : 
    1794                 :             : #define OMP_CLAUSE_DOACROSS_SINK_NEGATIVE(NODE) \
    1795                 :             :   TREE_PUBLIC (TREE_LIST_CHECK (NODE))
    1796                 :             : 
    1797                 :             : /* True if DOACROSS clause is spelled as DEPEND.  */
    1798                 :             : #define OMP_CLAUSE_DOACROSS_DEPEND(NODE) \
    1799                 :             :   TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DOACROSS))
    1800                 :             : 
    1801                 :             : #define OMP_CLAUSE_MAP_KIND(NODE) \
    1802                 :             :   ((enum gomp_map_kind) OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->omp_clause.subcode.map_kind)
    1803                 :             : #define OMP_CLAUSE_SET_MAP_KIND(NODE, MAP_KIND) \
    1804                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->omp_clause.subcode.map_kind \
    1805                 :             :    = (unsigned int) (MAP_KIND))
    1806                 :             : 
    1807                 :             : #define OMP_CLAUSE_MOTION_PRESENT(NODE) \
    1808                 :             :   (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_FROM, OMP_CLAUSE_TO)->base.deprecated_flag)
    1809                 :             : 
    1810                 :             : /* Nonzero if this map clause is for array (rather than pointer) based array
    1811                 :             :    section with zero bias.  Both the non-decl OMP_CLAUSE_MAP and corresponding
    1812                 :             :    OMP_CLAUSE_MAP with GOMP_MAP_POINTER are marked with this flag.  */
    1813                 :             : #define OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION(NODE) \
    1814                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->base.public_flag)
    1815                 :             : /* Nonzero if this is a mapped array section, that might need special
    1816                 :             :    treatment if OMP_CLAUSE_SIZE is zero.  */
    1817                 :             : #define OMP_CLAUSE_MAP_MAYBE_ZERO_LENGTH_ARRAY_SECTION(NODE) \
    1818                 :             :   TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP))
    1819                 :             : /* Nonzero if this map clause is for an OpenACC compute construct's reduction
    1820                 :             :    variable or OpenMP map clause mentioned also in in_reduction clause on the
    1821                 :             :    same construct.  */
    1822                 :             : #define OMP_CLAUSE_MAP_IN_REDUCTION(NODE) \
    1823                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP))
    1824                 :             : /* Nonzero on map clauses added implicitly for reduction clauses on combined
    1825                 :             :    or composite constructs.  They shall be removed if there is an explicit
    1826                 :             :    map clause.  */
    1827                 :             : #define OMP_CLAUSE_MAP_IMPLICIT(NODE) \
    1828                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->base.default_def_flag)
    1829                 :             : /* Nonzero if this map clause is to be indicated to the runtime as 'implicit',
    1830                 :             :    due to being created through implicit data-mapping rules in the middle-end.
    1831                 :             :    NOTE: this is different than OMP_CLAUSE_MAP_IMPLICIT.  */
    1832                 :             : #define OMP_CLAUSE_MAP_RUNTIME_IMPLICIT_P(NODE) \
    1833                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->base.deprecated_flag)
    1834                 :             : /* Nonzero for an attach/detach node whose decl was explicitly mapped on the
    1835                 :             :    same directive.  */
    1836                 :             : #define OMP_CLAUSE_ATTACHMENT_MAPPING_ERASED(NODE) \
    1837                 :             :   TREE_STATIC (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP))
    1838                 :             : /* Nonzero if this is a release/delete node which refers to a (Fortran) array
    1839                 :             :    descriptor.  */
    1840                 :             : #define OMP_CLAUSE_RELEASE_DESCRIPTOR(NODE) \
    1841                 :             :   TREE_NOTHROW (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP))
    1842                 :             : 
    1843                 :             : /* Flag that 'OMP_CLAUSE_DECL (NODE)' is to be made addressable during OMP
    1844                 :             :    lowering.  */
    1845                 :             : #define OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE(NODE) \
    1846                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->base.addressable_flag)
    1847                 :             : 
    1848                 :             : /* Nonzero if OpenACC 'readonly' modifier set, used for 'copyin'.  */
    1849                 :             : #define OMP_CLAUSE_MAP_READONLY(NODE) \
    1850                 :             :   TREE_READONLY (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP))
    1851                 :             : 
    1852                 :             : /* Same as above, for use in OpenACC cache directives.  */
    1853                 :             : #define OMP_CLAUSE__CACHE__READONLY(NODE) \
    1854                 :             :   TREE_READONLY (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__CACHE_))
    1855                 :             : 
    1856                 :             : /* True on an OMP_CLAUSE_USE_DEVICE_PTR with an OpenACC 'if_present'
    1857                 :             :    clause.  */
    1858                 :             : #define OMP_CLAUSE_USE_DEVICE_PTR_IF_PRESENT(NODE) \
    1859                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_USE_DEVICE_PTR)->base.public_flag)
    1860                 :             : 
    1861                 :             : #define OMP_CLAUSE_PROC_BIND_KIND(NODE) \
    1862                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PROC_BIND)->omp_clause.subcode.proc_bind_kind)
    1863                 :             : 
    1864                 :             : #define OMP_CLAUSE_DEVICE_TYPE_KIND(NODE) \
    1865                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEVICE_TYPE)->omp_clause.subcode.device_type_kind)
    1866                 :             : 
    1867                 :             : #define OMP_CLAUSE_INDIRECT_EXPR(NODE) \
    1868                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_INDIRECT), 0)
    1869                 :             : 
    1870                 :             : 
    1871                 :             : /* True if there is a device clause with a device-modifier 'ancestor'.  */
    1872                 :             : #define OMP_CLAUSE_DEVICE_ANCESTOR(NODE) \
    1873                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEVICE)->base.public_flag)
    1874                 :             : 
    1875                 :             : #define OMP_CLAUSE_COLLAPSE_EXPR(NODE) \
    1876                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 0)
    1877                 :             : #define OMP_CLAUSE_COLLAPSE_ITERVAR(NODE) \
    1878                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 1)
    1879                 :             : #define OMP_CLAUSE_COLLAPSE_COUNT(NODE) \
    1880                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 2)
    1881                 :             : 
    1882                 :             : #define OMP_CLAUSE_ORDERED_EXPR(NODE) \
    1883                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ORDERED), 0)
    1884                 :             : 
    1885                 :             : /* True on an OMP_CLAUSE_ORDERED if stand-alone ordered construct is nested
    1886                 :             :    inside of work-sharing loop the clause is on.  */
    1887                 :             : #define OMP_CLAUSE_ORDERED_DOACROSS(NODE) \
    1888                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ORDERED)->base.public_flag)
    1889                 :             : 
    1890                 :             : /* True for unconstrained modifier on order(concurrent) clause.  */
    1891                 :             : #define OMP_CLAUSE_ORDER_UNCONSTRAINED(NODE) \
    1892                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ORDER)->base.public_flag)
    1893                 :             : /* True for reproducible modifier on order(concurrent) clause.  */
    1894                 :             : #define OMP_CLAUSE_ORDER_REPRODUCIBLE(NODE) \
    1895                 :             :   TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ORDER))
    1896                 :             : 
    1897                 :             : #define OMP_CLAUSE_REDUCTION_CODE(NODE) \
    1898                 :             :   (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
    1899                 :             :      OMP_CLAUSE_IN_REDUCTION)->omp_clause.subcode.reduction_code)
    1900                 :             : #define OMP_CLAUSE_REDUCTION_INIT(NODE) \
    1901                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
    1902                 :             :                                               OMP_CLAUSE_IN_REDUCTION), 1)
    1903                 :             : #define OMP_CLAUSE_REDUCTION_MERGE(NODE) \
    1904                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
    1905                 :             :                                               OMP_CLAUSE_IN_REDUCTION), 2)
    1906                 :             : #define OMP_CLAUSE_REDUCTION_GIMPLE_INIT(NODE) \
    1907                 :             :   (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
    1908                 :             : #define OMP_CLAUSE_REDUCTION_GIMPLE_MERGE(NODE) \
    1909                 :             :   (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_merge
    1910                 :             : #define OMP_CLAUSE_REDUCTION_PLACEHOLDER(NODE) \
    1911                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
    1912                 :             :                                               OMP_CLAUSE_IN_REDUCTION), 3)
    1913                 :             : #define OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER(NODE) \
    1914                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
    1915                 :             :                                               OMP_CLAUSE_IN_REDUCTION), 4)
    1916                 :             : 
    1917                 :             : /* True if a REDUCTION clause may reference the original list item (omp_orig)
    1918                 :             :    in its OMP_CLAUSE_REDUCTION_{,GIMPLE_}INIT.  */
    1919                 :             : #define OMP_CLAUSE_REDUCTION_OMP_ORIG_REF(NODE) \
    1920                 :             :   (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
    1921                 :             :                            OMP_CLAUSE_IN_REDUCTION)->base.public_flag)
    1922                 :             : 
    1923                 :             : /* True if a REDUCTION clause has task reduction-modifier.  */
    1924                 :             : #define OMP_CLAUSE_REDUCTION_TASK(NODE) \
    1925                 :             :   TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION))
    1926                 :             : 
    1927                 :             : /* True if a REDUCTION clause has inscan reduction-modifier.  */
    1928                 :             : #define OMP_CLAUSE_REDUCTION_INSCAN(NODE) \
    1929                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION))
    1930                 :             : 
    1931                 :             : /* True if a LINEAR clause doesn't need copy in.  True for iterator vars which
    1932                 :             :    are always initialized inside of the loop construct, false otherwise.  */
    1933                 :             : #define OMP_CLAUSE_LINEAR_NO_COPYIN(NODE) \
    1934                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR)->base.public_flag)
    1935                 :             : 
    1936                 :             : /* True if a LINEAR clause doesn't need copy out.  True for iterator vars which
    1937                 :             :    are declared inside of the simd construct.  */
    1938                 :             : #define OMP_CLAUSE_LINEAR_NO_COPYOUT(NODE) \
    1939                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR))
    1940                 :             : 
    1941                 :             : /* True if a LINEAR clause has a stride that is variable.  */
    1942                 :             : #define OMP_CLAUSE_LINEAR_VARIABLE_STRIDE(NODE) \
    1943                 :             :   TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR))
    1944                 :             : 
    1945                 :             : /* True for a LINEAR clause with old style modifier syntax
    1946                 :             :    linear(modifier(list)) or linear(modifier(list):step).  */
    1947                 :             : #define OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER(NODE) \
    1948                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR)->base.addressable_flag)
    1949                 :             : 
    1950                 :             : /* True if a LINEAR clause is for an array or allocatable variable that
    1951                 :             :    needs special handling by the frontend.  */
    1952                 :             : #define OMP_CLAUSE_LINEAR_ARRAY(NODE) \
    1953                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR)->base.deprecated_flag)
    1954                 :             : 
    1955                 :             : #define OMP_CLAUSE_LINEAR_STEP(NODE) \
    1956                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR), 1)
    1957                 :             : 
    1958                 :             : #define OMP_CLAUSE_LINEAR_STMT(NODE) \
    1959                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR), 2)
    1960                 :             : 
    1961                 :             : #define OMP_CLAUSE_LINEAR_GIMPLE_SEQ(NODE) \
    1962                 :             :   (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
    1963                 :             : 
    1964                 :             : #define OMP_CLAUSE_LINEAR_KIND(NODE) \
    1965                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR)->omp_clause.subcode.linear_kind)
    1966                 :             : 
    1967                 :             : #define OMP_CLAUSE_ALIGNED_ALIGNMENT(NODE) \
    1968                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ALIGNED), 1)
    1969                 :             : 
    1970                 :             : #define OMP_CLAUSE_ALLOCATE_ALLOCATOR(NODE) \
    1971                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ALLOCATE), 1)
    1972                 :             : 
    1973                 :             : #define OMP_CLAUSE_ALLOCATE_ALIGN(NODE) \
    1974                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ALLOCATE), 2)
    1975                 :             : 
    1976                 :             : /* True if an ALLOCATE clause was present on a combined or composite
    1977                 :             :    construct and the code for splitting the clauses has already performed
    1978                 :             :    checking if the listed variable has explicit privatization on the
    1979                 :             :    construct.  */
    1980                 :             : #define OMP_CLAUSE_ALLOCATE_COMBINED(NODE) \
    1981                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ALLOCATE)->base.public_flag)
    1982                 :             : 
    1983                 :             : #define OMP_CLAUSE_NUM_TEAMS_UPPER_EXPR(NODE) \
    1984                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_TEAMS), 0)
    1985                 :             : 
    1986                 :             : #define OMP_CLAUSE_NUM_TEAMS_LOWER_EXPR(NODE) \
    1987                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_TEAMS), 1)
    1988                 :             : 
    1989                 :             : #define OMP_CLAUSE_THREAD_LIMIT_EXPR(NODE) \
    1990                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, \
    1991                 :             :                                                 OMP_CLAUSE_THREAD_LIMIT), 0)
    1992                 :             : 
    1993                 :             : #define OMP_CLAUSE_DEVICE_ID(NODE) \
    1994                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEVICE), 0)
    1995                 :             : 
    1996                 :             : #define OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR(NODE) \
    1997                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, \
    1998                 :             :                                                 OMP_CLAUSE_DIST_SCHEDULE), 0)
    1999                 :             : 
    2000                 :             : #define OMP_CLAUSE_SAFELEN_EXPR(NODE) \
    2001                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SAFELEN), 0)
    2002                 :             : 
    2003                 :             : #define OMP_CLAUSE_SIMDLEN_EXPR(NODE) \
    2004                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SIMDLEN), 0)
    2005                 :             : 
    2006                 :             : #define OMP_CLAUSE__SIMDUID__DECL(NODE) \
    2007                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__SIMDUID_), 0)
    2008                 :             : 
    2009                 :             : #define OMP_CLAUSE_SCHEDULE_KIND(NODE) \
    2010                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE)->omp_clause.subcode.schedule_kind)
    2011                 :             : 
    2012                 :             : /* True if a SCHEDULE clause has the simd modifier on it.  */
    2013                 :             : #define OMP_CLAUSE_SCHEDULE_SIMD(NODE) \
    2014                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE)->base.public_flag)
    2015                 :             : 
    2016                 :             : #define OMP_CLAUSE_DEFAULT_KIND(NODE) \
    2017                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEFAULT)->omp_clause.subcode.default_kind)
    2018                 :             : 
    2019                 :             : #define OMP_CLAUSE_DEFAULTMAP_KIND(NODE) \
    2020                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEFAULTMAP)->omp_clause.subcode.defaultmap_kind)
    2021                 :             : #define OMP_CLAUSE_DEFAULTMAP_CATEGORY(NODE) \
    2022                 :             :   ((enum omp_clause_defaultmap_kind) \
    2023                 :             :    (OMP_CLAUSE_DEFAULTMAP_KIND (NODE) & OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK))
    2024                 :             : #define OMP_CLAUSE_DEFAULTMAP_BEHAVIOR(NODE) \
    2025                 :             :   ((enum omp_clause_defaultmap_kind) \
    2026                 :             :    (OMP_CLAUSE_DEFAULTMAP_KIND (NODE) & OMP_CLAUSE_DEFAULTMAP_MASK))
    2027                 :             : #define OMP_CLAUSE_DEFAULTMAP_SET_KIND(NODE, BEHAVIOR, CATEGORY) \
    2028                 :             :   (OMP_CLAUSE_DEFAULTMAP_KIND (NODE) \
    2029                 :             :    = (enum omp_clause_defaultmap_kind) (CATEGORY | BEHAVIOR))
    2030                 :             : 
    2031                 :             : #define OMP_CLAUSE_BIND_KIND(NODE) \
    2032                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_BIND)->omp_clause.subcode.bind_kind)
    2033                 :             : 
    2034                 :             : /* True if ENTER clause is spelled as TO.  */
    2035                 :             : #define OMP_CLAUSE_ENTER_TO(NODE) \
    2036                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ENTER)->base.public_flag)
    2037                 :             : 
    2038                 :             : #define OMP_CLAUSE_TILE_LIST(NODE) \
    2039                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_TILE), 0)
    2040                 :             : #define OMP_CLAUSE_TILE_ITERVAR(NODE) \
    2041                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_TILE), 1)
    2042                 :             : #define OMP_CLAUSE_TILE_COUNT(NODE) \
    2043                 :             :   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_TILE), 2)
    2044                 :             : 
    2045                 :             : /* _CONDTEMP_ holding temporary with iteration count.  */
    2046                 :             : #define OMP_CLAUSE__CONDTEMP__ITER(NODE) \
    2047                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__CONDTEMP_)->base.public_flag)
    2048                 :             : 
    2049                 :             : /* _SCANTEMP_ holding temporary with pointer to thread's local array;
    2050                 :             :    allocation.  */
    2051                 :             : #define OMP_CLAUSE__SCANTEMP__ALLOC(NODE) \
    2052                 :             :   (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__SCANTEMP_)->base.public_flag)
    2053                 :             : 
    2054                 :             : /* _SCANTEMP_ holding temporary with a control variable for deallocation;
    2055                 :             :    one boolean_type_node for test whether alloca was used, another one
    2056                 :             :    to pass to __builtin_stack_restore or free.  */
    2057                 :             : #define OMP_CLAUSE__SCANTEMP__CONTROL(NODE) \
    2058                 :             :   TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__SCANTEMP_))
    2059                 :             : 
    2060                 :             : /* SSA_NAME accessors.  */
    2061                 :             : 
    2062                 :             : /* Whether SSA_NAME NODE is a virtual operand.  This simply caches the
    2063                 :             :    information in the underlying SSA_NAME_VAR for efficiency.  */
    2064                 :             : #define SSA_NAME_IS_VIRTUAL_OPERAND(NODE) \
    2065                 :             :   SSA_NAME_CHECK (NODE)->base.public_flag
    2066                 :             : 
    2067                 :             : /* Returns the IDENTIFIER_NODE giving the SSA name a name or NULL_TREE
    2068                 :             :    if there is no name associated with it.  */
    2069                 :             : #define SSA_NAME_IDENTIFIER(NODE)                               \
    2070                 :             :   (SSA_NAME_CHECK (NODE)->ssa_name.var != NULL_TREE          \
    2071                 :             :    ? (TREE_CODE ((NODE)->ssa_name.var) == IDENTIFIER_NODE    \
    2072                 :             :       ? (NODE)->ssa_name.var                                 \
    2073                 :             :       : DECL_NAME ((NODE)->ssa_name.var))                    \
    2074                 :             :    : NULL_TREE)
    2075                 :             : 
    2076                 :             : /* Returns the variable being referenced.  This can be NULL_TREE for
    2077                 :             :    temporaries not associated with any user variable.
    2078                 :             :    Once released, this is the only field that can be relied upon.  */
    2079                 :             : #define SSA_NAME_VAR(NODE)                                      \
    2080                 :             :   (SSA_NAME_CHECK (NODE)->ssa_name.var == NULL_TREE          \
    2081                 :             :    || TREE_CODE ((NODE)->ssa_name.var) == IDENTIFIER_NODE    \
    2082                 :             :    ? NULL_TREE : (NODE)->ssa_name.var)
    2083                 :             : 
    2084                 :             : #define SET_SSA_NAME_VAR_OR_IDENTIFIER(NODE,VAR) \
    2085                 :             :   do \
    2086                 :             :     { \
    2087                 :             :       tree var_ = (VAR); \
    2088                 :             :       SSA_NAME_CHECK (NODE)->ssa_name.var = var_; \
    2089                 :             :       SSA_NAME_IS_VIRTUAL_OPERAND (NODE) \
    2090                 :             :         = (var_ \
    2091                 :             :            && TREE_CODE (var_) == VAR_DECL \
    2092                 :             :            && VAR_DECL_IS_VIRTUAL_OPERAND (var_)); \
    2093                 :             :     } \
    2094                 :             :   while (0)
    2095                 :             : 
    2096                 :             : /* Returns the statement which defines this SSA name.  */
    2097                 :             : #define SSA_NAME_DEF_STMT(NODE) SSA_NAME_CHECK (NODE)->ssa_name.def_stmt
    2098                 :             : 
    2099                 :             : /* Returns the SSA version number of this SSA name.  Note that in
    2100                 :             :    tree SSA, version numbers are not per variable and may be recycled.  */
    2101                 :             : #define SSA_NAME_VERSION(NODE)  SSA_NAME_CHECK (NODE)->base.u.version
    2102                 :             : 
    2103                 :             : /* Nonzero if this SSA name occurs in an abnormal PHI.  SSA_NAMES are
    2104                 :             :    never output, so we can safely use the ASM_WRITTEN_FLAG for this
    2105                 :             :    status bit.  */
    2106                 :             : #define SSA_NAME_OCCURS_IN_ABNORMAL_PHI(NODE) \
    2107                 :             :     SSA_NAME_CHECK (NODE)->base.asm_written_flag
    2108                 :             : 
    2109                 :             : /* Nonzero if this SSA_NAME expression is currently on the free list of
    2110                 :             :    SSA_NAMES.  Using NOTHROW_FLAG seems reasonably safe since throwing
    2111                 :             :    has no meaning for an SSA_NAME.  */
    2112                 :             : #define SSA_NAME_IN_FREE_LIST(NODE) \
    2113                 :             :     SSA_NAME_CHECK (NODE)->base.nothrow_flag
    2114                 :             : 
    2115                 :             : /* Nonzero if this SSA_NAME is the default definition for the
    2116                 :             :    underlying symbol.  A default SSA name is created for symbol S if
    2117                 :             :    the very first reference to S in the function is a read operation.
    2118                 :             :    Default definitions are always created by an empty statement and
    2119                 :             :    belong to no basic block.  */
    2120                 :             : #define SSA_NAME_IS_DEFAULT_DEF(NODE) \
    2121                 :             :     SSA_NAME_CHECK (NODE)->base.default_def_flag
    2122                 :             : 
    2123                 :             : /* Nonzero if this SSA_NAME is known to point to memory that may not
    2124                 :             :    be written to.  This is set for default defs of function parameters
    2125                 :             :    that have a corresponding r or R specification in the functions
    2126                 :             :    fn spec attribute.  This is used by alias analysis.  */
    2127                 :             : #define SSA_NAME_POINTS_TO_READONLY_MEMORY(NODE) \
    2128                 :             :     SSA_NAME_CHECK (NODE)->base.deprecated_flag
    2129                 :             : 
    2130                 :             : /* Attributes for SSA_NAMEs for pointer-type variables.  */
    2131                 :             : #define SSA_NAME_PTR_INFO(N) \
    2132                 :             :    SSA_NAME_CHECK (N)->ssa_name.info.ptr_info
    2133                 :             : 
    2134                 :             : /* Value range info attributes for SSA_NAMEs of non pointer-type variables.  */
    2135                 :             : #define SSA_NAME_RANGE_INFO(N) \
    2136                 :             :     SSA_NAME_CHECK (N)->ssa_name.info.range_info
    2137                 :             : 
    2138                 :             : /* Return the immediate_use information for an SSA_NAME. */
    2139                 :             : #define SSA_NAME_IMM_USE_NODE(NODE) SSA_NAME_CHECK (NODE)->ssa_name.imm_uses
    2140                 :             : 
    2141                 :             : #define OMP_CLAUSE_CODE(NODE)                                   \
    2142                 :             :         (OMP_CLAUSE_CHECK (NODE))->omp_clause.code
    2143                 :             : 
    2144                 :             : #define OMP_CLAUSE_SET_CODE(NODE, CODE)                         \
    2145                 :             :         ((OMP_CLAUSE_CHECK (NODE))->omp_clause.code = (CODE))
    2146                 :             : 
    2147                 :             : #define OMP_CLAUSE_OPERAND(NODE, I)                             \
    2148                 :             :         OMP_CLAUSE_ELT_CHECK (NODE, I)
    2149                 :             : 
    2150                 :             : /* In a BLOCK (scope) node:
    2151                 :             :    Variables declared in the scope NODE.  */
    2152                 :             : #define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars)
    2153                 :             : #define BLOCK_NONLOCALIZED_VARS(NODE) \
    2154                 :             :   (BLOCK_CHECK (NODE)->block.nonlocalized_vars)
    2155                 :             : #define BLOCK_NUM_NONLOCALIZED_VARS(NODE) \
    2156                 :             :   vec_safe_length (BLOCK_NONLOCALIZED_VARS (NODE))
    2157                 :             : #define BLOCK_NONLOCALIZED_VAR(NODE,N) (*BLOCK_NONLOCALIZED_VARS (NODE))[N]
    2158                 :             : /* A chain of BLOCKs (scopes) nested within the scope NODE.  */
    2159                 :             : #define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks)
    2160                 :             : /* The scope enclosing the scope NODE, or FUNCTION_DECL for the "outermost"
    2161                 :             :    function scope.  Inlined functions are chained by this so that given
    2162                 :             :    expression E and its TREE_BLOCK(E) B, BLOCK_SUPERCONTEXT(B) is the scope
    2163                 :             :    in which E has been made or into which E has been inlined.   */
    2164                 :             : #define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
    2165                 :             : /* Points to the next scope at the same level of nesting as scope NODE.  */
    2166                 :             : #define BLOCK_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.chain)
    2167                 :             : /* A BLOCK, or FUNCTION_DECL of the function from which a block has been
    2168                 :             :    inlined.  In a scope immediately enclosing an inlined leaf expression,
    2169                 :             :    points to the outermost scope into which it has been inlined (thus
    2170                 :             :    bypassing all intermediate BLOCK_SUPERCONTEXTs). */
    2171                 :             : #define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin)
    2172                 :             : #define BLOCK_ORIGIN(NODE) \
    2173                 :             :   (BLOCK_ABSTRACT_ORIGIN(NODE) ? BLOCK_ABSTRACT_ORIGIN(NODE) : (NODE))
    2174                 :             : #define BLOCK_DIE(NODE) (BLOCK_CHECK (NODE)->block.die)
    2175                 :             : 
    2176                 :             : /* True if BLOCK has the same ranges as its BLOCK_SUPERCONTEXT.  */
    2177                 :             : #define BLOCK_SAME_RANGE(NODE) (BLOCK_CHECK (NODE)->base.u.bits.nameless_flag)
    2178                 :             : 
    2179                 :             : /* True if BLOCK appears in cold section.  */
    2180                 :             : #define BLOCK_IN_COLD_SECTION_P(NODE) \
    2181                 :             :   (BLOCK_CHECK (NODE)->base.u.bits.atomic_flag)
    2182                 :             : 
    2183                 :             : /* An index number for this block.  These values are not guaranteed to
    2184                 :             :    be unique across functions -- whether or not they are depends on
    2185                 :             :    the debugging output format in use.  */
    2186                 :             : #define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num)
    2187                 :             : 
    2188                 :             : /* If block reordering splits a lexical block into discontiguous
    2189                 :             :    address ranges, we'll make a copy of the original block.
    2190                 :             : 
    2191                 :             :    Note that this is logically distinct from BLOCK_ABSTRACT_ORIGIN.
    2192                 :             :    In that case, we have one source block that has been replicated
    2193                 :             :    (through inlining or unrolling) into many logical blocks, and that
    2194                 :             :    these logical blocks have different physical variables in them.
    2195                 :             : 
    2196                 :             :    In this case, we have one logical block split into several
    2197                 :             :    non-contiguous address ranges.  Most debug formats can't actually
    2198                 :             :    represent this idea directly, so we fake it by creating multiple
    2199                 :             :    logical blocks with the same variables in them.  However, for those
    2200                 :             :    that do support non-contiguous regions, these allow the original
    2201                 :             :    logical block to be reconstructed, along with the set of address
    2202                 :             :    ranges.
    2203                 :             : 
    2204                 :             :    One of the logical block fragments is arbitrarily chosen to be
    2205                 :             :    the ORIGIN.  The other fragments will point to the origin via
    2206                 :             :    BLOCK_FRAGMENT_ORIGIN; the origin itself will have this pointer
    2207                 :             :    be null.  The list of fragments will be chained through
    2208                 :             :    BLOCK_FRAGMENT_CHAIN from the origin.  */
    2209                 :             : 
    2210                 :             : #define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin)
    2211                 :             : #define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain)
    2212                 :             : 
    2213                 :             : /* For an inlined function, this gives the location where it was called
    2214                 :             :    from.  This is only set in the top level block, which corresponds to the
    2215                 :             :    inlined function scope.  This is used in the debug output routines.  */
    2216                 :             : 
    2217                 :             : #define BLOCK_SOURCE_LOCATION(NODE) (BLOCK_CHECK (NODE)->block.locus)
    2218                 :             : 
    2219                 :             : /* This gives the location of the end of the block, useful to attach
    2220                 :             :    code implicitly generated for outgoing paths.  */
    2221                 :             : 
    2222                 :             : #define BLOCK_SOURCE_END_LOCATION(NODE) (BLOCK_CHECK (NODE)->block.end_locus)
    2223                 :             : 
    2224                 :             : /* Define fields and accessors for nodes representing data types.  */
    2225                 :             : 
    2226                 :             : /* See tree.def for documentation of the use of these fields.
    2227                 :             :    Look at the documentation of the various ..._TYPE tree codes.
    2228                 :             : 
    2229                 :             :    Note that the type.values, type.minval, and type.maxval fields are
    2230                 :             :    overloaded and used for different macros in different kinds of types.
    2231                 :             :    Each macro must check to ensure the tree node is of the proper kind of
    2232                 :             :    type.  Note also that some of the front-ends also overload these fields,
    2233                 :             :    so they must be checked as well.  */
    2234                 :             : 
    2235                 :             : #define TYPE_UID(NODE) (TYPE_CHECK (NODE)->type_common.uid)
    2236                 :             : /* Type size in bits as a tree expression.  Need not be constant and may
    2237                 :             :    be greater than TYPE_SIZE for a C++ FIELD_DECL representing a base
    2238                 :             :    class subobject with its own virtual base classes (which are laid out
    2239                 :             :    separately).  */
    2240                 :             : #define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->type_common.size)
    2241                 :             : /* Likewise, type size in bytes.  */
    2242                 :             : #define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type_common.size_unit)
    2243                 :             : #define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type_common.pointer_to)
    2244                 :             : #define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type_common.reference_to)
    2245                 :             : #define TYPE_PRECISION(NODE) \
    2246                 :             :   (TREE_NOT_CHECK (TYPE_CHECK (NODE), VECTOR_TYPE)->type_common.precision)
    2247                 :             : #define TYPE_PRECISION_RAW(NODE) (TYPE_CHECK (NODE)->type_common.precision)
    2248                 :             : #define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type_common.name)
    2249                 :             : #define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type_common.next_variant)
    2250                 :             : #define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type_common.main_variant)
    2251                 :             : #define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type_common.context)
    2252                 :             : 
    2253                 :             : #define TYPE_MODE_RAW(NODE) (TYPE_CHECK (NODE)->type_common.mode)
    2254                 :             : #define TYPE_MODE(NODE) \
    2255                 :             :   (VECTOR_TYPE_P (TYPE_CHECK (NODE)) \
    2256                 :             :    ? vector_type_mode (NODE) : (NODE)->type_common.mode)
    2257                 :             : #define SCALAR_TYPE_MODE(NODE) \
    2258                 :             :   (as_a <scalar_mode> (TYPE_CHECK (NODE)->type_common.mode))
    2259                 :             : #define SCALAR_INT_TYPE_MODE(NODE) \
    2260                 :             :   (as_a <scalar_int_mode> (TYPE_CHECK (NODE)->type_common.mode))
    2261                 :             : #define SCALAR_FLOAT_TYPE_MODE(NODE) \
    2262                 :             :   (as_a <scalar_float_mode> (TYPE_CHECK (NODE)->type_common.mode))
    2263                 :             : #define SET_TYPE_MODE(NODE, MODE) \
    2264                 :             :   (TYPE_CHECK (NODE)->type_common.mode = (MODE))
    2265                 :             : 
    2266                 :             : extern unsigned int element_precision (const_tree);
    2267                 :             : extern machine_mode element_mode (const_tree);
    2268                 :             : extern machine_mode vector_type_mode (const_tree);
    2269                 :             : extern unsigned int vector_element_bits (const_tree);
    2270                 :             : extern tree vector_element_bits_tree (const_tree);
    2271                 :             : 
    2272                 :             : /* The "canonical" type for this type node, which is used by frontends to
    2273                 :             :    compare the type for equality with another type.  If two types are
    2274                 :             :    equal (based on the semantics of the language), then they will have
    2275                 :             :    equivalent TYPE_CANONICAL entries.
    2276                 :             : 
    2277                 :             :    As a special case, if TYPE_CANONICAL is NULL_TREE, and thus
    2278                 :             :    TYPE_STRUCTURAL_EQUALITY_P is true, then it cannot
    2279                 :             :    be used for comparison against other types.  Instead, the type is
    2280                 :             :    said to require structural equality checks, described in
    2281                 :             :    TYPE_STRUCTURAL_EQUALITY_P.
    2282                 :             : 
    2283                 :             :    For unqualified aggregate and function types the middle-end relies on
    2284                 :             :    TYPE_CANONICAL to tell whether two variables can be assigned
    2285                 :             :    to each other without a conversion.  The middle-end also makes sure
    2286                 :             :    to assign the same alias-sets to the type partition with equal
    2287                 :             :    TYPE_CANONICAL of their unqualified variants.  */
    2288                 :             : #define TYPE_CANONICAL(NODE) (TYPE_CHECK (NODE)->type_common.canonical)
    2289                 :             : /* Indicates that the type node requires structural equality
    2290                 :             :    checks.  The compiler will need to look at the composition of the
    2291                 :             :    type to determine whether it is equal to another type, rather than
    2292                 :             :    just comparing canonical type pointers.  For instance, we would need
    2293                 :             :    to look at the return and parameter types of a FUNCTION_TYPE
    2294                 :             :    node.  */
    2295                 :             : #define TYPE_STRUCTURAL_EQUALITY_P(NODE) (TYPE_CANONICAL (NODE) == NULL_TREE)
    2296                 :             : /* Sets the TYPE_CANONICAL field to NULL_TREE, indicating that the
    2297                 :             :    type node requires structural equality.  */
    2298                 :             : #define SET_TYPE_STRUCTURAL_EQUALITY(NODE) (TYPE_CANONICAL (NODE) = NULL_TREE)
    2299                 :             : 
    2300                 :             : #define TYPE_IBIT(NODE) (GET_MODE_IBIT (TYPE_MODE (NODE)))
    2301                 :             : #define TYPE_FBIT(NODE) (GET_MODE_FBIT (TYPE_MODE (NODE)))
    2302                 :             : 
    2303                 :             : /* The (language-specific) typed-based alias set for this type.
    2304                 :             :    Objects whose TYPE_ALIAS_SETs are different cannot alias each
    2305                 :             :    other.  If the TYPE_ALIAS_SET is -1, no alias set has yet been
    2306                 :             :    assigned to this type.  If the TYPE_ALIAS_SET is 0, objects of this
    2307                 :             :    type can alias objects of any type.  */
    2308                 :             : #define TYPE_ALIAS_SET(NODE) (TYPE_CHECK (NODE)->type_common.alias_set)
    2309                 :             : 
    2310                 :             : /* Nonzero iff the typed-based alias set for this type has been
    2311                 :             :    calculated.  */
    2312                 :             : #define TYPE_ALIAS_SET_KNOWN_P(NODE) \
    2313                 :             :   (TYPE_CHECK (NODE)->type_common.alias_set != -1)
    2314                 :             : 
    2315                 :             : /* A TREE_LIST of IDENTIFIER nodes of the attributes that apply
    2316                 :             :    to this type.  */
    2317                 :             : #define TYPE_ATTRIBUTES(NODE) (TYPE_CHECK (NODE)->type_common.attributes)
    2318                 :             : 
    2319                 :             : /* Raw access to the alignment field.  */
    2320                 :             : #define TYPE_ALIGN_RAW(NODE)                    \
    2321                 :             :   (TYPE_CHECK (NODE)->type_common.align)
    2322                 :             : 
    2323                 :             : /* The alignment necessary for objects of this type.
    2324                 :             :    The value is an int, measured in bits and must be a power of two.
    2325                 :             :    We support also an "alignment" of zero.  */
    2326                 :             : #define TYPE_ALIGN(NODE)                                        \
    2327                 :             :   (TYPE_ALIGN_RAW (NODE)                                        \
    2328                 :             :    ? ((unsigned)1) << (TYPE_ALIGN_RAW(NODE) - 1) : 0)
    2329                 :             : 
    2330                 :             : /* Specify that TYPE_ALIGN(NODE) is X.  */
    2331                 :             : #define SET_TYPE_ALIGN(NODE, X) \
    2332                 :             :     (TYPE_CHECK (NODE)->type_common.align = ffs_hwi (X))
    2333                 :             : 
    2334                 :             : /* 1 if the alignment for this type was requested by "aligned" attribute,
    2335                 :             :    0 if it is the default for this type.  */
    2336                 :             : #define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->base.u.bits.user_align)
    2337                 :             : 
    2338                 :             : /* The alignment for NODE, in bytes.  */
    2339                 :             : #define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
    2340                 :             : 
    2341                 :             : /* The minimum alignment necessary for objects of this type without
    2342                 :             :    warning.  The value is an int, measured in bits.  */
    2343                 :             : #define TYPE_WARN_IF_NOT_ALIGN(NODE) \
    2344                 :             :     (TYPE_CHECK (NODE)->type_common.warn_if_not_align \
    2345                 :             :      ? ((unsigned)1) << ((NODE)->type_common.warn_if_not_align - 1) : 0)
    2346                 :             : 
    2347                 :             : /* Specify that TYPE_WARN_IF_NOT_ALIGN(NODE) is X.  */
    2348                 :             : #define SET_TYPE_WARN_IF_NOT_ALIGN(NODE, X) \
    2349                 :             :     (TYPE_CHECK (NODE)->type_common.warn_if_not_align = ffs_hwi (X))
    2350                 :             : 
    2351                 :             : /* If your language allows you to declare types, and you want debug info
    2352                 :             :    for them, then you need to generate corresponding TYPE_DECL nodes.
    2353                 :             :    These "stub" TYPE_DECL nodes have no name, and simply point at the
    2354                 :             :    type node.  You then set the TYPE_STUB_DECL field of the type node
    2355                 :             :    to point back at the TYPE_DECL node.  This allows the debug routines
    2356                 :             :    to know that the two nodes represent the same type, so that we only
    2357                 :             :    get one debug info record for them.  */
    2358                 :             : #define TYPE_STUB_DECL(NODE) (TREE_CHAIN (TYPE_CHECK (NODE)))
    2359                 :             : 
    2360                 :             : /* In a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ARRAY_TYPE, it means
    2361                 :             :    the type has BLKmode only because it lacks the alignment required for
    2362                 :             :    its size.  */
    2363                 :             : #define TYPE_NO_FORCE_BLK(NODE) \
    2364                 :             :   (TYPE_CHECK (NODE)->type_common.no_force_blk_flag)
    2365                 :             : 
    2366                 :             : /* Nonzero in a type considered volatile as a whole.  */
    2367                 :             : #define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->base.volatile_flag)
    2368                 :             : 
    2369                 :             : /* Nonzero in a type considered atomic as a whole.  */
    2370                 :             : #define TYPE_ATOMIC(NODE) (TYPE_CHECK (NODE)->base.u.bits.atomic_flag)
    2371                 :             : 
    2372                 :             : /* Means this type is const-qualified.  */
    2373                 :             : #define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->base.readonly_flag)
    2374                 :             : 
    2375                 :             : /* If nonzero, this type is `restrict'-qualified, in the C sense of
    2376                 :             :    the term.  */
    2377                 :             : #define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type_common.restrict_flag)
    2378                 :             : 
    2379                 :             : /* If nonzero, type's name shouldn't be emitted into debug info.  */
    2380                 :             : #define TYPE_NAMELESS(NODE) (TYPE_CHECK (NODE)->base.u.bits.nameless_flag)
    2381                 :             : 
    2382                 :             : /* The address space the type is in.  */
    2383                 :             : #define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.u.bits.address_space)
    2384                 :             : 
    2385                 :             : /* Encode/decode the named memory support as part of the qualifier.  If more
    2386                 :             :    than 8 qualifiers are added, these macros need to be adjusted.  */
    2387                 :             : #define ENCODE_QUAL_ADDR_SPACE(NUM) ((NUM & 0xFF) << 8)
    2388                 :             : #define DECODE_QUAL_ADDR_SPACE(X) (((X) >> 8) & 0xFF)
    2389                 :             : 
    2390                 :             : /* Return all qualifiers except for the address space qualifiers.  */
    2391                 :             : #define CLEAR_QUAL_ADDR_SPACE(X) ((X) & ~0xFF00)
    2392                 :             : 
    2393                 :             : /* Only keep the address space out of the qualifiers and discard the other
    2394                 :             :    qualifiers.  */
    2395                 :             : #define KEEP_QUAL_ADDR_SPACE(X) ((X) & 0xFF00)
    2396                 :             : 
    2397                 :             : /* The set of type qualifiers for this type.  */
    2398                 :             : #define TYPE_QUALS(NODE)                                        \
    2399                 :             :   ((int) ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)              \
    2400                 :             :           | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)         \
    2401                 :             :           | (TYPE_ATOMIC (NODE) * TYPE_QUAL_ATOMIC)             \
    2402                 :             :           | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)         \
    2403                 :             :           | (ENCODE_QUAL_ADDR_SPACE (TYPE_ADDR_SPACE (NODE)))))
    2404                 :             : 
    2405                 :             : /* The same as TYPE_QUALS without the address space qualifications.  */
    2406                 :             : #define TYPE_QUALS_NO_ADDR_SPACE(NODE)                          \
    2407                 :             :   ((int) ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)              \
    2408                 :             :           | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)         \
    2409                 :             :           | (TYPE_ATOMIC (NODE) * TYPE_QUAL_ATOMIC)             \
    2410                 :             :           | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)))
    2411                 :             : 
    2412                 :             : /* The same as TYPE_QUALS without the address space and atomic 
    2413                 :             :    qualifications.  */
    2414                 :             : #define TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC(NODE)                \
    2415                 :             :   ((int) ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)              \
    2416                 :             :           | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)         \
    2417                 :             :           | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)))
    2418                 :             : 
    2419                 :             : /* These flags are available for each language front end to use internally.  */
    2420                 :             : #define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_0)
    2421                 :             : #define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_1)
    2422                 :             : #define TYPE_LANG_FLAG_2(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_2)
    2423                 :             : #define TYPE_LANG_FLAG_3(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_3)
    2424                 :             : #define TYPE_LANG_FLAG_4(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_4)
    2425                 :             : #define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_5)
    2426                 :             : #define TYPE_LANG_FLAG_6(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_6)
    2427                 :             : #define TYPE_LANG_FLAG_7(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_7)
    2428                 :             : 
    2429                 :             : /* Used to keep track of visited nodes in tree traversals.  This is set to
    2430                 :             :    0 by copy_node and make_node.  */
    2431                 :             : #define TREE_VISITED(NODE) ((NODE)->base.visited)
    2432                 :             : 
    2433                 :             : /* If set in an ARRAY_TYPE, indicates a string type (for languages
    2434                 :             :    that distinguish string from array of char).
    2435                 :             :    If set in a INTEGER_TYPE, indicates a character type.  */
    2436                 :             : #define TYPE_STRING_FLAG(NODE) \
    2437                 :             :         (ARRAY_OR_INTEGER_TYPE_CHECK (NODE)->type_common.string_flag)
    2438                 :             : 
    2439                 :             : /* If set for RECORD_TYPE or UNION_TYPE it indicates that the type conforms
    2440                 :             :    to the C++ one definition rule.  This is used for LTO canonical type
    2441                 :             :    computation.  */
    2442                 :             : #define TYPE_CXX_ODR_P(NODE) \
    2443                 :             :         (RECORD_OR_UNION_CHECK (NODE)->type_common.string_flag)
    2444                 :             : 
    2445                 :             : /* Nonzero in a VECTOR_TYPE if the frontends should not emit warnings
    2446                 :             :    about missing conversions to other vector types of the same size.  */
    2447                 :             : #define TYPE_VECTOR_OPAQUE(NODE) \
    2448                 :             :   (VECTOR_TYPE_CHECK (NODE)->base.default_def_flag)
    2449                 :             : 
    2450                 :             : /* Indicates that objects of this type must be initialized by calling a
    2451                 :             :    function when they are created.  */
    2452                 :             : #define TYPE_NEEDS_CONSTRUCTING(NODE) \
    2453                 :             :   (TYPE_CHECK (NODE)->type_common.needs_constructing_flag)
    2454                 :             : 
    2455                 :             : /* Indicates that a UNION_TYPE object should be passed the same way that
    2456                 :             :    the first union alternative would be passed, or that a RECORD_TYPE
    2457                 :             :    object should be passed the same way that the first (and only) member
    2458                 :             :    would be passed.  */
    2459                 :             : #define TYPE_TRANSPARENT_AGGR(NODE) \
    2460                 :             :   (RECORD_OR_UNION_CHECK (NODE)->type_common.transparent_aggr_flag)
    2461                 :             : 
    2462                 :             : /* For an ARRAY_TYPE, indicates that it is not permitted to take the
    2463                 :             :    address of a component of the type.  This is the counterpart of
    2464                 :             :    DECL_NONADDRESSABLE_P for arrays, see the definition of this flag.  */
    2465                 :             : #define TYPE_NONALIASED_COMPONENT(NODE) \
    2466                 :             :   (ARRAY_TYPE_CHECK (NODE)->type_common.transparent_aggr_flag)
    2467                 :             : 
    2468                 :             : /* For an ARRAY_TYPE, a RECORD_TYPE, a UNION_TYPE or a QUAL_UNION_TYPE
    2469                 :             :    whether the array is typeless storage or the type contains a member
    2470                 :             :    with this flag set.  Such types are exempt from type-based alias
    2471                 :             :    analysis.  For ARRAY_TYPEs with AGGREGATE_TYPE_P element types
    2472                 :             :    the flag should be inherited from the element type, can change
    2473                 :             :    when type is finalized and because of that should not be used in
    2474                 :             :    type hashing.  For ARRAY_TYPEs with non-AGGREGATE_TYPE_P element types
    2475                 :             :    the flag should not be changed after the array is created and should
    2476                 :             :    be used in type hashing.  */
    2477                 :             : #define TYPE_TYPELESS_STORAGE(NODE) \
    2478                 :             :   (TREE_CHECK4 (NODE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, \
    2479                 :             :                 ARRAY_TYPE)->type_common.typeless_storage)
    2480                 :             : 
    2481                 :             : /* Indicated that objects of this type should be laid out in as
    2482                 :             :    compact a way as possible.  */
    2483                 :             : #define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->base.u.bits.packed_flag)
    2484                 :             : 
    2485                 :             : /* Used by type_contains_placeholder_p to avoid recomputation.
    2486                 :             :    Values are: 0 (unknown), 1 (false), 2 (true).  Never access
    2487                 :             :    this field directly.  */
    2488                 :             : #define TYPE_CONTAINS_PLACEHOLDER_INTERNAL(NODE) \
    2489                 :             :   (TYPE_CHECK (NODE)->type_common.contains_placeholder_bits)
    2490                 :             : 
    2491                 :             : /* Nonzero if RECORD_TYPE represents a final derivation of class.  */
    2492                 :             : #define TYPE_FINAL_P(NODE) \
    2493                 :             :   (RECORD_OR_UNION_CHECK (NODE)->base.default_def_flag)
    2494                 :             : 
    2495                 :             : /* The debug output functions use the symtab union field to store
    2496                 :             :    information specific to the debugging format.  The different debug
    2497                 :             :    output hooks store different types in the union field.  These three
    2498                 :             :    macros are used to access different fields in the union.  The debug
    2499                 :             :    hooks are responsible for consistently using only a specific
    2500                 :             :    macro.  */
    2501                 :             : 
    2502                 :             : /* Symtab field as an integer.  Used by stabs generator in dbxout.cc to
    2503                 :             :    hold the type's number in the generated stabs.  */
    2504                 :             : #define TYPE_SYMTAB_ADDRESS(NODE) \
    2505                 :             :   (TYPE_CHECK (NODE)->type_common.symtab.address)
    2506                 :             : 
    2507                 :             : /* Symtab field as a pointer to a DWARF DIE.  Used by DWARF generator
    2508                 :             :    in dwarf2out.cc to point to the DIE generated for the type.  */
    2509                 :             : #define TYPE_SYMTAB_DIE(NODE) \
    2510                 :             :   (TYPE_CHECK (NODE)->type_common.symtab.die)
    2511                 :             : 
    2512                 :             : /* The garbage collector needs to know the interpretation of the
    2513                 :             :    symtab field.  These constants represent the different types in the
    2514                 :             :    union.  */
    2515                 :             : 
    2516                 :             : #define TYPE_SYMTAB_IS_ADDRESS (0)
    2517                 :             : #define TYPE_SYMTAB_IS_DIE (1)
    2518                 :             : 
    2519                 :             : #define TYPE_LANG_SPECIFIC(NODE) \
    2520                 :             :   (TYPE_CHECK (NODE)->type_with_lang_specific.lang_specific)
    2521                 :             : 
    2522                 :             : #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type_non_common.values)
    2523                 :             : #define TYPE_DOMAIN(NODE) (ARRAY_TYPE_CHECK (NODE)->type_non_common.values)
    2524                 :             : #define TYPE_FIELDS(NODE)                               \
    2525                 :             :   (RECORD_OR_UNION_CHECK (NODE)->type_non_common.values)
    2526                 :             : #define TYPE_CACHED_VALUES(NODE) (TYPE_CHECK (NODE)->type_non_common.values)
    2527                 :             : #define TYPE_ARG_TYPES(NODE)                            \
    2528                 :             :   (FUNC_OR_METHOD_CHECK (NODE)->type_non_common.values)
    2529                 :             : #define TYPE_VALUES_RAW(NODE) (TYPE_CHECK (NODE)->type_non_common.values)
    2530                 :             : 
    2531                 :             : #define TYPE_MIN_VALUE(NODE)                            \
    2532                 :             :   (NUMERICAL_TYPE_CHECK (NODE)->type_non_common.minval)
    2533                 :             : #define TYPE_NEXT_PTR_TO(NODE)                          \
    2534                 :             :   (POINTER_TYPE_CHECK (NODE)->type_non_common.minval)
    2535                 :             : #define TYPE_NEXT_REF_TO(NODE)                          \
    2536                 :             :   (REFERENCE_TYPE_CHECK (NODE)->type_non_common.minval)
    2537                 :             : #define TYPE_VFIELD(NODE)                               \
    2538                 :             :   (RECORD_OR_UNION_CHECK (NODE)->type_non_common.minval)
    2539                 :             : #define TYPE_MIN_VALUE_RAW(NODE) (TYPE_CHECK (NODE)->type_non_common.minval)
    2540                 :             : 
    2541                 :             : #define TYPE_MAX_VALUE(NODE) \
    2542                 :             :   (NUMERICAL_TYPE_CHECK (NODE)->type_non_common.maxval)
    2543                 :             : #define TYPE_METHOD_BASETYPE(NODE)                      \
    2544                 :             :   (FUNC_OR_METHOD_CHECK (NODE)->type_non_common.maxval)
    2545                 :             : #define TYPE_OFFSET_BASETYPE(NODE)                      \
    2546                 :             :   (OFFSET_TYPE_CHECK (NODE)->type_non_common.maxval)
    2547                 :             : /* If non-NULL, this is an upper bound of the size (in bytes) of an
    2548                 :             :    object of the given ARRAY_TYPE_NON_COMMON.  This allows temporaries to be
    2549                 :             :    allocated.  */
    2550                 :             : #define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) \
    2551                 :             :   (ARRAY_TYPE_CHECK (ARRAY_TYPE)->type_non_common.maxval)
    2552                 :             : #define TYPE_MAX_VALUE_RAW(NODE) (TYPE_CHECK (NODE)->type_non_common.maxval)
    2553                 :             : /* For record and union types, information about this type, as a base type
    2554                 :             :    for itself.  */
    2555                 :             : #define TYPE_BINFO(NODE) (RECORD_OR_UNION_CHECK (NODE)->type_non_common.maxval)
    2556                 :             : 
    2557                 :             : /* For types, used in a language-dependent way.  */
    2558                 :             : #define TYPE_LANG_SLOT_1(NODE) \
    2559                 :             :   (TYPE_CHECK (NODE)->type_non_common.lang_1)
    2560                 :             : 
    2561                 :             : /* Define accessor macros for information about type inheritance
    2562                 :             :    and basetypes.
    2563                 :             : 
    2564                 :             :    A "basetype" means a particular usage of a data type for inheritance
    2565                 :             :    in another type.  Each such basetype usage has its own "binfo"
    2566                 :             :    object to describe it.  The binfo object is a TREE_VEC node.
    2567                 :             : 
    2568                 :             :    Inheritance is represented by the binfo nodes allocated for a
    2569                 :             :    given type.  For example, given types C and D, such that D is
    2570                 :             :    inherited by C, 3 binfo nodes will be allocated: one for describing
    2571                 :             :    the binfo properties of C, similarly one for D, and one for
    2572                 :             :    describing the binfo properties of D as a base type for C.
    2573                 :             :    Thus, given a pointer to class C, one can get a pointer to the binfo
    2574                 :             :    of D acting as a basetype for C by looking at C's binfo's basetypes.  */
    2575                 :             : 
    2576                 :             : /* BINFO specific flags.  */
    2577                 :             : 
    2578                 :             : /* Nonzero means that the derivation chain is via a `virtual' declaration.  */
    2579                 :             : #define BINFO_VIRTUAL_P(NODE) (TREE_BINFO_CHECK (NODE)->base.static_flag)
    2580                 :             : 
    2581                 :             : /* Flags for language dependent use.  */
    2582                 :             : #define BINFO_FLAG_0(NODE) TREE_LANG_FLAG_0 (TREE_BINFO_CHECK (NODE))
    2583                 :             : #define BINFO_FLAG_1(NODE) TREE_LANG_FLAG_1 (TREE_BINFO_CHECK (NODE))
    2584                 :             : #define BINFO_FLAG_2(NODE) TREE_LANG_FLAG_2 (TREE_BINFO_CHECK (NODE))
    2585                 :             : #define BINFO_FLAG_3(NODE) TREE_LANG_FLAG_3 (TREE_BINFO_CHECK (NODE))
    2586                 :             : #define BINFO_FLAG_4(NODE) TREE_LANG_FLAG_4 (TREE_BINFO_CHECK (NODE))
    2587                 :             : #define BINFO_FLAG_5(NODE) TREE_LANG_FLAG_5 (TREE_BINFO_CHECK (NODE))
    2588                 :             : #define BINFO_FLAG_6(NODE) TREE_LANG_FLAG_6 (TREE_BINFO_CHECK (NODE))
    2589                 :             : 
    2590                 :             : /* The actual data type node being inherited in this basetype.  */
    2591                 :             : #define BINFO_TYPE(NODE) TREE_TYPE (TREE_BINFO_CHECK (NODE))
    2592                 :             : 
    2593                 :             : /* The offset where this basetype appears in its containing type.
    2594                 :             :    BINFO_OFFSET slot holds the offset (in bytes)
    2595                 :             :    from the base of the complete object to the base of the part of the
    2596                 :             :    object that is allocated on behalf of this `type'.
    2597                 :             :    This is always 0 except when there is multiple inheritance.  */
    2598                 :             : 
    2599                 :             : #define BINFO_OFFSET(NODE) (TREE_BINFO_CHECK (NODE)->binfo.offset)
    2600                 :             : #define BINFO_OFFSET_ZEROP(NODE) (integer_zerop (BINFO_OFFSET (NODE)))
    2601                 :             : 
    2602                 :             : /* The virtual function table belonging to this basetype.  Virtual
    2603                 :             :    function tables provide a mechanism for run-time method dispatching.
    2604                 :             :    The entries of a virtual function table are language-dependent.  */
    2605                 :             : 
    2606                 :             : #define BINFO_VTABLE(NODE) (TREE_BINFO_CHECK (NODE)->binfo.vtable)
    2607                 :             : 
    2608                 :             : /* The virtual functions in the virtual function table.  This is
    2609                 :             :    a TREE_LIST that is used as an initial approximation for building
    2610                 :             :    a virtual function table for this basetype.  */
    2611                 :             : #define BINFO_VIRTUALS(NODE) (TREE_BINFO_CHECK (NODE)->binfo.virtuals)
    2612                 :             : 
    2613                 :             : /* A vector of binfos for the direct basetypes inherited by this
    2614                 :             :    basetype.
    2615                 :             : 
    2616                 :             :    If this basetype describes type D as inherited in C, and if the
    2617                 :             :    basetypes of D are E and F, then this vector contains binfos for
    2618                 :             :    inheritance of E and F by C.  */
    2619                 :             : #define BINFO_BASE_BINFOS(NODE) (&TREE_BINFO_CHECK (NODE)->binfo.base_binfos)
    2620                 :             : 
    2621                 :             : /* The number of basetypes for NODE.  */
    2622                 :             : #define BINFO_N_BASE_BINFOS(NODE) (BINFO_BASE_BINFOS (NODE)->length ())
    2623                 :             : 
    2624                 :             : /* Accessor macro to get to the Nth base binfo of this binfo.  */
    2625                 :             : #define BINFO_BASE_BINFO(NODE,N) \
    2626                 :             :  ((*BINFO_BASE_BINFOS (NODE))[(N)])
    2627                 :             : #define BINFO_BASE_ITERATE(NODE,N,B) \
    2628                 :             :  (BINFO_BASE_BINFOS (NODE)->iterate ((N), &(B)))
    2629                 :             : #define BINFO_BASE_APPEND(NODE,T) \
    2630                 :             :  (BINFO_BASE_BINFOS (NODE)->quick_push ((T)))
    2631                 :             : 
    2632                 :             : /* For a BINFO record describing a virtual base class, i.e., one where
    2633                 :             :    TREE_VIA_VIRTUAL is set, this field assists in locating the virtual
    2634                 :             :    base.  The actual contents are language-dependent.  In the C++
    2635                 :             :    front-end this field is an INTEGER_CST giving an offset into the
    2636                 :             :    vtable where the offset to the virtual base can be found.  */
    2637                 :             : #define BINFO_VPTR_FIELD(NODE) (TREE_BINFO_CHECK (NODE)->binfo.vptr_field)
    2638                 :             : 
    2639                 :             : /* Indicates the accesses this binfo has to its bases. The values are
    2640                 :             :    access_public_node, access_protected_node or access_private_node.
    2641                 :             :    If this array is not present, public access is implied.  */
    2642                 :             : #define BINFO_BASE_ACCESSES(NODE) \
    2643                 :             :   (TREE_BINFO_CHECK (NODE)->binfo.base_accesses)
    2644                 :             : 
    2645                 :             : #define BINFO_BASE_ACCESS(NODE,N) \
    2646                 :             :   (*BINFO_BASE_ACCESSES (NODE))[(N)]
    2647                 :             : #define BINFO_BASE_ACCESS_APPEND(NODE,T) \
    2648                 :             :   BINFO_BASE_ACCESSES (NODE)->quick_push ((T))
    2649                 :             : 
    2650                 :             : /* The index in the VTT where this subobject's sub-VTT can be found.
    2651                 :             :    NULL_TREE if there is no sub-VTT.  */
    2652                 :             : #define BINFO_SUBVTT_INDEX(NODE) (TREE_BINFO_CHECK (NODE)->binfo.vtt_subvtt)
    2653                 :             : 
    2654                 :             : /* The index in the VTT where the vptr for this subobject can be
    2655                 :             :    found.  NULL_TREE if there is no secondary vptr in the VTT.  */
    2656                 :             : #define BINFO_VPTR_INDEX(NODE) (TREE_BINFO_CHECK (NODE)->binfo.vtt_vptr)
    2657                 :             : 
    2658                 :             : /* The BINFO_INHERITANCE_CHAIN points at the binfo for the base
    2659                 :             :    inheriting this base for non-virtual bases. For virtual bases it
    2660                 :             :    points either to the binfo for which this is a primary binfo, or to
    2661                 :             :    the binfo of the most derived type.  */
    2662                 :             : #define BINFO_INHERITANCE_CHAIN(NODE) \
    2663                 :             :         (TREE_BINFO_CHECK (NODE)->binfo.inheritance)
    2664                 :             : 
    2665                 :             : 
    2666                 :             : /* Define fields and accessors for nodes representing declared names.  */
    2667                 :             : 
    2668                 :             : /* Nonzero if DECL represents an SSA name or a variable that can possibly
    2669                 :             :    have an associated SSA name.  */
    2670                 :             : #define SSA_VAR_P(DECL)                                                 \
    2671                 :             :         (TREE_CODE (DECL) == VAR_DECL                                   \
    2672                 :             :          || TREE_CODE (DECL) == PARM_DECL                               \
    2673                 :             :          || TREE_CODE (DECL) == RESULT_DECL                             \
    2674                 :             :          || TREE_CODE (DECL) == SSA_NAME)
    2675                 :             : 
    2676                 :             : 
    2677                 :             : #define DECL_CHAIN(NODE) (TREE_CHAIN (DECL_MINIMAL_CHECK (NODE)))
    2678                 :             : 
    2679                 :             : /* This is the name of the object as written by the user.
    2680                 :             :    It is an IDENTIFIER_NODE.  */
    2681                 :             : #define DECL_NAME(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.name)
    2682                 :             : 
    2683                 :             : /* The IDENTIFIER_NODE associated with the TYPE_NAME field.  */
    2684                 :             : #define TYPE_IDENTIFIER(NODE) \
    2685                 :             :   (TYPE_NAME (NODE) && DECL_P (TYPE_NAME (NODE)) \
    2686                 :             :    ? DECL_NAME (TYPE_NAME (NODE)) : TYPE_NAME (NODE))
    2687                 :             : 
    2688                 :             : /* Every ..._DECL node gets a unique number.  */
    2689                 :             : #define DECL_UID(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.uid)
    2690                 :             : 
    2691                 :             : /* DEBUG_EXPR_DECLs get negative UID numbers, to catch erroneous
    2692                 :             :    uses.  */
    2693                 :             : #define DEBUG_TEMP_UID(NODE) (-DECL_UID (TREE_CHECK ((NODE), DEBUG_EXPR_DECL)))
    2694                 :             : 
    2695                 :             : /* Every ..._DECL node gets a unique number that stays the same even
    2696                 :             :    when the decl is copied by the inliner once it is set.  */
    2697                 :             : #define DECL_PT_UID(NODE) \
    2698                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid == -1u \
    2699                 :             :    ? (NODE)->decl_minimal.uid : (NODE)->decl_common.pt_uid)
    2700                 :             : /* Initialize the ..._DECL node pt-uid to the decls uid.  */
    2701                 :             : #define SET_DECL_PT_UID(NODE, UID) \
    2702                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid = (UID))
    2703                 :             : /* Whether the ..._DECL node pt-uid has been initialized and thus needs to
    2704                 :             :    be preserved when copyin the decl.  */
    2705                 :             : #define DECL_PT_UID_SET_P(NODE) \
    2706                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid != -1u)
    2707                 :             : 
    2708                 :             : /* These two fields describe where in the source code the declaration
    2709                 :             :    was.  If the declaration appears in several places (as for a C
    2710                 :             :    function that is declared first and then defined later), this
    2711                 :             :    information should refer to the definition.  */
    2712                 :             : #define DECL_SOURCE_LOCATION(NODE) \
    2713                 :             :   (DECL_MINIMAL_CHECK (NODE)->decl_minimal.locus)
    2714                 :             : #define DECL_SOURCE_FILE(NODE) LOCATION_FILE (DECL_SOURCE_LOCATION (NODE))
    2715                 :             : #define DECL_SOURCE_LINE(NODE) LOCATION_LINE (DECL_SOURCE_LOCATION (NODE))
    2716                 :             : #define DECL_SOURCE_COLUMN(NODE) LOCATION_COLUMN (DECL_SOURCE_LOCATION (NODE))
    2717                 :             : /* This decl was created by a front-end or back-end rather than by
    2718                 :             :    user code, and has not been explicitly declared by the user -- when
    2719                 :             :    that happens the source location is updated to the user's
    2720                 :             :    source.  This includes decls with no location (!).  */
    2721                 :             : #define DECL_IS_UNDECLARED_BUILTIN(DECL) \
    2722                 :             :   (DECL_SOURCE_LOCATION (DECL) <= BUILTINS_LOCATION)
    2723                 :             : 
    2724                 :             : /*  For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or
    2725                 :             :     QUAL_UNION_TYPE node that the field is a member of.  For VAR_DECL,
    2726                 :             :     PARM_DECL, FUNCTION_DECL, LABEL_DECL, RESULT_DECL, and CONST_DECL
    2727                 :             :     nodes, this points to either the FUNCTION_DECL for the containing
    2728                 :             :     function, the RECORD_TYPE or UNION_TYPE for the containing type, or
    2729                 :             :     NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file
    2730                 :             :     scope".  In particular, for VAR_DECLs which are virtual table pointers
    2731                 :             :     (they have DECL_VIRTUAL set), we use DECL_CONTEXT to determine the type
    2732                 :             :     they belong to.  */
    2733                 :             : #define DECL_CONTEXT(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.context)
    2734                 :             : #define DECL_FIELD_CONTEXT(NODE) \
    2735                 :             :   (FIELD_DECL_CHECK (NODE)->decl_minimal.context)
    2736                 :             : 
    2737                 :             : /* If nonzero, decl's name shouldn't be emitted into debug info.  */
    2738                 :             : #define DECL_NAMELESS(NODE) (DECL_MINIMAL_CHECK (NODE)->base.u.bits.nameless_flag)
    2739                 :             : 
    2740                 :             : /* For any sort of a ..._DECL node, this points to the original (abstract)
    2741                 :             :    decl node which this decl is an inlined/cloned instance of, or else it
    2742                 :             :    is NULL indicating that this decl is not an instance of some other decl.
    2743                 :             : 
    2744                 :             :    The C front-end also uses this in a nested declaration of an inline
    2745                 :             :    function, to point back to the definition.  */
    2746                 :             : #define DECL_ABSTRACT_ORIGIN(NODE) \
    2747                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.abstract_origin)
    2748                 :             : 
    2749                 :             : /* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract
    2750                 :             :    origin.  This is useful when setting the DECL_ABSTRACT_ORIGIN.  */
    2751                 :             : #define DECL_ORIGIN(NODE) \
    2752                 :             :   (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE))
    2753                 :             : 
    2754                 :             : /* Nonzero for any sort of ..._DECL node means this decl node represents an
    2755                 :             :    inline instance of some original (abstract) decl from an inline function;
    2756                 :             :    suppress any warnings about shadowing some other variable.  FUNCTION_DECL
    2757                 :             :    nodes can also have their abstract origin set to themselves.  */
    2758                 :             : #define DECL_FROM_INLINE(NODE) \
    2759                 :             :   (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \
    2760                 :             :    && DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
    2761                 :             : 
    2762                 :             : /* In a DECL this is the field where attributes are stored.  */
    2763                 :             : #define DECL_ATTRIBUTES(NODE) \
    2764                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.attributes)
    2765                 :             : 
    2766                 :             : /* For a FUNCTION_DECL, holds the tree of BINDINGs.
    2767                 :             :    For a TRANSLATION_UNIT_DECL, holds the namespace's BLOCK.
    2768                 :             :    For a VAR_DECL, holds the initial value.
    2769                 :             :    For a PARM_DECL, used for DECL_ARG_TYPE--default
    2770                 :             :    values for parameters are encoded in the type of the function,
    2771                 :             :    not in the PARM_DECL slot.
    2772                 :             :    For a FIELD_DECL, this is used for enumeration values and the C
    2773                 :             :    frontend uses it for temporarily storing bitwidth of bitfields.
    2774                 :             : 
    2775                 :             :    ??? Need to figure out some way to check this isn't a PARM_DECL.  */
    2776                 :             : #define DECL_INITIAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.initial)
    2777                 :             : 
    2778                 :             : /* Holds the size of the datum, in bits, as a tree expression.
    2779                 :             :    Need not be constant and may be null.  May be less than TYPE_SIZE
    2780                 :             :    for a C++ FIELD_DECL representing a base class subobject with its
    2781                 :             :    own virtual base classes (which are laid out separately).  */
    2782                 :             : #define DECL_SIZE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.size)
    2783                 :             : /* Likewise for the size in bytes.  */
    2784                 :             : #define DECL_SIZE_UNIT(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.size_unit)
    2785                 :             : #define DECL_ALIGN_RAW(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.align)
    2786                 :             : /* Returns the alignment required for the datum, in bits.  It must
    2787                 :             :    be a power of two, but an "alignment" of zero is supported
    2788                 :             :    (e.g. as "uninitialized" sentinel).  */
    2789                 :             : #define DECL_ALIGN(NODE)                                        \
    2790                 :             :   (DECL_ALIGN_RAW (NODE)                                        \
    2791                 :             :    ? ((unsigned)1) << (DECL_ALIGN_RAW (NODE) - 1) : 0)
    2792                 :             : /* Specify that DECL_ALIGN(NODE) is X.  */
    2793                 :             : #define SET_DECL_ALIGN(NODE, X) \
    2794                 :             :   (DECL_ALIGN_RAW (NODE) = ffs_hwi (X))
    2795                 :             : 
    2796                 :             : /* The minimum alignment necessary for the datum, in bits, without
    2797                 :             :    warning.  */
    2798                 :             : #define DECL_WARN_IF_NOT_ALIGN_RAW(NODE)                        \
    2799                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.warn_if_not_align)
    2800                 :             : #define DECL_WARN_IF_NOT_ALIGN(NODE)                                    \
    2801                 :             :   (DECL_WARN_IF_NOT_ALIGN_RAW (NODE)                                    \
    2802                 :             :    ? ((unsigned)1) << (DECL_WARN_IF_NOT_ALIGN_RAW (NODE) - 1) : 0)
    2803                 :             : 
    2804                 :             : /* Specify that DECL_WARN_IF_NOT_ALIGN(NODE) is X.  */
    2805                 :             : #define SET_DECL_WARN_IF_NOT_ALIGN(NODE, X)             \
    2806                 :             :   (DECL_WARN_IF_NOT_ALIGN_RAW (NODE) = ffs_hwi (X))
    2807                 :             : 
    2808                 :             : /* The alignment of NODE, in bytes.  */
    2809                 :             : #define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
    2810                 :             : /* Set if the alignment of this DECL has been set by the user, for
    2811                 :             :    example with an 'aligned' attribute.  */
    2812                 :             : #define DECL_USER_ALIGN(NODE) \
    2813                 :             :   (DECL_COMMON_CHECK (NODE)->base.u.bits.user_align)
    2814                 :             : /* Holds the machine mode corresponding to the declaration of a variable or
    2815                 :             :    field.  Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
    2816                 :             :    FIELD_DECL.  */
    2817                 :             : #define DECL_MODE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.mode)
    2818                 :             : #define SET_DECL_MODE(NODE, MODE) \
    2819                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.mode = (MODE))
    2820                 :             : 
    2821                 :             : /* For FUNCTION_DECL, if it is built-in, this identifies which built-in
    2822                 :             :    operation it is.  This is only intended for low-level accesses;
    2823                 :             :    normally DECL_FUNCTION_CODE, DECL_FE_FUNCTION_CODE or DECL_MD_FUNCTION
    2824                 :             :    should be used instead.  */
    2825                 :             : #define DECL_UNCHECKED_FUNCTION_CODE(NODE) \
    2826                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.function_code)
    2827                 :             : 
    2828                 :             : /* Test if FCODE is a function code for an alloca operation.  */
    2829                 :             : #define ALLOCA_FUNCTION_CODE_P(FCODE)                           \
    2830                 :             :   ((FCODE) == BUILT_IN_ALLOCA                                   \
    2831                 :             :    || (FCODE) == BUILT_IN_ALLOCA_WITH_ALIGN                     \
    2832                 :             :    || (FCODE) == BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX)
    2833                 :             : 
    2834                 :             : /* Generate case for an alloca operation.  */
    2835                 :             : #define CASE_BUILT_IN_ALLOCA                    \
    2836                 :             :   case BUILT_IN_ALLOCA:                         \
    2837                 :             :   case BUILT_IN_ALLOCA_WITH_ALIGN:              \
    2838                 :             :   case BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX
    2839                 :             : 
    2840                 :             : #define DECL_FUNCTION_PERSONALITY(NODE) \
    2841                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.personality)
    2842                 :             : 
    2843                 :             : /* Nonzero for a given ..._DECL node means that the name of this node should
    2844                 :             :    be ignored for symbolic debug purposes.  For a TYPE_DECL, this means that
    2845                 :             :    the associated type should be ignored.  For a FUNCTION_DECL, the body of
    2846                 :             :    the function should also be ignored.  */
    2847                 :             : #define DECL_IGNORED_P(NODE) \
    2848                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.ignored_flag)
    2849                 :             : 
    2850                 :             : /* Nonzero for a given ..._DECL node means that this node represents an
    2851                 :             :    "abstract instance" of the given declaration (e.g. in the original
    2852                 :             :    declaration of an inline function).  When generating symbolic debugging
    2853                 :             :    information, we mustn't try to generate any address information for nodes
    2854                 :             :    marked as "abstract instances" because we don't actually generate
    2855                 :             :    any code or allocate any data space for such instances.  */
    2856                 :             : #define DECL_ABSTRACT_P(NODE) \
    2857                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.abstract_flag)
    2858                 :             : 
    2859                 :             : /* Language-specific decl information.  */
    2860                 :             : #define DECL_LANG_SPECIFIC(NODE) \
    2861                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_specific)
    2862                 :             : 
    2863                 :             : /* In a VAR_DECL or FUNCTION_DECL, nonzero means external reference:
    2864                 :             :    do not allocate storage, and refer to a definition elsewhere.  Note that
    2865                 :             :    this does not necessarily imply the entity represented by NODE
    2866                 :             :    has no program source-level definition in this translation unit.  For
    2867                 :             :    example, for a FUNCTION_DECL, DECL_SAVED_TREE may be non-NULL and
    2868                 :             :    DECL_EXTERNAL may be true simultaneously; that can be the case for
    2869                 :             :    a C99 "extern inline" function.  */
    2870                 :             : #define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_1)
    2871                 :             : 
    2872                 :             : /* Nonzero in a ..._DECL means this variable is ref'd from a nested function.
    2873                 :             :    For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes.
    2874                 :             : 
    2875                 :             :    For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted.
    2876                 :             : 
    2877                 :             :    Also set in some languages for variables, etc., outside the normal
    2878                 :             :    lexical scope, such as class instance variables.  */
    2879                 :             : #define DECL_NONLOCAL(NODE) \
    2880                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.nonlocal_flag)
    2881                 :             : 
    2882                 :             : /* Used in VAR_DECLs to indicate that the variable is a vtable.
    2883                 :             :    Used in FIELD_DECLs for vtable pointers.
    2884                 :             :    Used in FUNCTION_DECLs to indicate that the function is virtual.  */
    2885                 :             : #define DECL_VIRTUAL_P(NODE) \
    2886                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.virtual_flag)
    2887                 :             : 
    2888                 :             : /* Used to indicate that this DECL represents a compiler-generated entity.  */
    2889                 :             : #define DECL_ARTIFICIAL(NODE) \
    2890                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.artificial_flag)
    2891                 :             : 
    2892                 :             : /* Additional flags for language-specific uses.  */
    2893                 :             : #define DECL_LANG_FLAG_0(NODE) \
    2894                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_0)
    2895                 :             : #define DECL_LANG_FLAG_1(NODE) \
    2896                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_1)
    2897                 :             : #define DECL_LANG_FLAG_2(NODE) \
    2898                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_2)
    2899                 :             : #define DECL_LANG_FLAG_3(NODE) \
    2900                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_3)
    2901                 :             : #define DECL_LANG_FLAG_4(NODE) \
    2902                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_4)
    2903                 :             : #define DECL_LANG_FLAG_5(NODE) \
    2904                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_5)
    2905                 :             : #define DECL_LANG_FLAG_6(NODE) \
    2906                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_6)
    2907                 :             : #define DECL_LANG_FLAG_7(NODE) \
    2908                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_7)
    2909                 :             : #define DECL_LANG_FLAG_8(NODE) \
    2910                 :             :   (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_8)
    2911                 :             : 
    2912                 :             : /* Nonzero for a scope which is equal to file scope.  */
    2913                 :             : #define SCOPE_FILE_SCOPE_P(EXP) \
    2914                 :             :   (! (EXP) || TREE_CODE (EXP) == TRANSLATION_UNIT_DECL)
    2915                 :             : /* Nonzero for a decl which is at file scope.  */
    2916                 :             : #define DECL_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (DECL_CONTEXT (EXP))
    2917                 :             : /* Nonzero for a type which is at file scope.  */
    2918                 :             : #define TYPE_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (TYPE_CONTEXT (EXP))
    2919                 :             : 
    2920                 :             : /* Nonzero for a decl that is decorated using attribute used.
    2921                 :             :    This indicates to compiler tools that this decl needs to be preserved.  */
    2922                 :             : #define DECL_PRESERVE_P(DECL) \
    2923                 :             :   DECL_COMMON_CHECK (DECL)->decl_common.preserve_flag
    2924                 :             : 
    2925                 :             : /* Nonzero for a decl that is decorated with the "noinit" attribute.
    2926                 :             :    decls with this attribute are placed into the ".noinit" section, so they are
    2927                 :             :    not initialized by the target's startup code.  */
    2928                 :             : #define DECL_NOINIT_P(DECL)     \
    2929                 :             :   (DECL_P (DECL)                \
    2930                 :             :    && (lookup_attribute ("noinit", DECL_ATTRIBUTES (DECL)) != NULL_TREE))
    2931                 :             : 
    2932                 :             : /* Nonzero for a decl that is decorated with the "persistent" attribute.
    2933                 :             :    decls with this attribute are placed into the ".persistent" section, so they
    2934                 :             :    are not initialized by the target's startup code.  */
    2935                 :             : #define DECL_PERSISTENT_P(DECL) \
    2936                 :             :   (DECL_P (DECL)                \
    2937                 :             :    && (lookup_attribute ("persistent", DECL_ATTRIBUTES (DECL)) != NULL_TREE))
    2938                 :             : 
    2939                 :             : /* For function local variables of COMPLEX and VECTOR types,
    2940                 :             :    indicates that the variable is not aliased, and that all
    2941                 :             :    modifications to the variable have been adjusted so that
    2942                 :             :    they are killing assignments.  Thus the variable may now
    2943                 :             :    be treated as a GIMPLE register, and use real instead of
    2944                 :             :    virtual ops in SSA form.  */
    2945                 :             : #define DECL_NOT_GIMPLE_REG_P(DECL) \
    2946                 :             :   DECL_COMMON_CHECK (DECL)->decl_common.not_gimple_reg_flag
    2947                 :             : 
    2948                 :             : extern tree decl_value_expr_lookup (tree);
    2949                 :             : extern void decl_value_expr_insert (tree, tree);
    2950                 :             : 
    2951                 :             : /* In a VAR_DECL or PARM_DECL, the location at which the value may be found,
    2952                 :             :    if transformations have made this more complicated than evaluating the
    2953                 :             :    decl itself.  */
    2954                 :             : #define DECL_HAS_VALUE_EXPR_P(NODE) \
    2955                 :             :   (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, RESULT_DECL) \
    2956                 :             :    ->decl_common.decl_flag_2)
    2957                 :             : #define DECL_VALUE_EXPR(NODE) \
    2958                 :             :   (decl_value_expr_lookup (DECL_WRTL_CHECK (NODE)))
    2959                 :             : #define SET_DECL_VALUE_EXPR(NODE, VAL) \
    2960                 :             :   (decl_value_expr_insert (DECL_WRTL_CHECK (NODE), VAL))
    2961                 :             : 
    2962                 :             : /* Holds the RTL expression for the value of a variable or function.
    2963                 :             :    This value can be evaluated lazily for functions, variables with
    2964                 :             :    static storage duration, and labels.  */
    2965                 :             : #define DECL_RTL(NODE)                                  \
    2966                 :             :   (DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl         \
    2967                 :             :    ? (NODE)->decl_with_rtl.rtl                                       \
    2968                 :             :    : (make_decl_rtl (NODE), (NODE)->decl_with_rtl.rtl))
    2969                 :             : 
    2970                 :             : /* Set the DECL_RTL for NODE to RTL.  */
    2971                 :             : #define SET_DECL_RTL(NODE, RTL) set_decl_rtl (NODE, RTL)
    2972                 :             : 
    2973                 :             : /* Returns nonzero if NODE is a tree node that can contain RTL.  */
    2974                 :             : #define HAS_RTL_P(NODE) (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WRTL))
    2975                 :             : 
    2976                 :             : /* Returns nonzero if the DECL_RTL for NODE has already been set.  */
    2977                 :             : #define DECL_RTL_SET_P(NODE) \
    2978                 :             :   (HAS_RTL_P (NODE) && DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl != NULL)
    2979                 :             : 
    2980                 :             : /* Copy the RTL from SRC_DECL to DST_DECL.  If the RTL was not set for
    2981                 :             :    SRC_DECL, it will not be set for DST_DECL; this is a lazy copy.  */
    2982                 :             : #define COPY_DECL_RTL(SRC_DECL, DST_DECL) \
    2983                 :             :   (DECL_WRTL_CHECK (DST_DECL)->decl_with_rtl.rtl \
    2984                 :             :    = DECL_WRTL_CHECK (SRC_DECL)->decl_with_rtl.rtl)
    2985                 :             : 
    2986                 :             : /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set.  */
    2987                 :             : #define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)
    2988                 :             : 
    2989                 :             : #if (GCC_VERSION >= 2007)
    2990                 :             : #define DECL_RTL_KNOWN_SET(decl) __extension__                          \
    2991                 :             : ({  tree const __d = (decl);                                            \
    2992                 :             :     gcc_checking_assert (DECL_RTL_SET_P (__d));                         \
    2993                 :             :     /* Dereference it so the compiler knows it can't be NULL even       \
    2994                 :             :        without assertion checking.  */                                  \
    2995                 :             :     &*DECL_RTL_IF_SET (__d); })
    2996                 :             : #else
    2997                 :             : #define DECL_RTL_KNOWN_SET(decl) (&*DECL_RTL_IF_SET (decl))
    2998                 :             : #endif
    2999                 :             : 
    3000                 :             : /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'.  */
    3001                 :             : #define DECL_REGISTER(NODE) (DECL_WRTL_CHECK (NODE)->decl_common.decl_flag_0)
    3002                 :             : 
    3003                 :             : /* In a FIELD_DECL, this is the field position, counting in bytes, of the
    3004                 :             :    DECL_OFFSET_ALIGN-bit-sized word containing the bit closest to the beginning
    3005                 :             :    of the structure.  */
    3006                 :             : #define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.offset)
    3007                 :             : 
    3008                 :             : /* In a FIELD_DECL, this is the offset, in bits, of the first bit of the
    3009                 :             :    field from DECL_FIELD_OFFSET.  This field may be nonzero even for fields
    3010                 :             :    that are not bit fields (since DECL_OFFSET_ALIGN may be larger than the
    3011                 :             :    natural alignment of the field's type).  */
    3012                 :             : #define DECL_FIELD_BIT_OFFSET(NODE) \
    3013                 :             :   (FIELD_DECL_CHECK (NODE)->field_decl.bit_offset)
    3014                 :             : 
    3015                 :             : /* In a FIELD_DECL, this indicates whether the field was a bit-field and
    3016                 :             :    if so, the type that was originally specified for it.
    3017                 :             :    TREE_TYPE may have been modified (in finish_struct).  */
    3018                 :             : #define DECL_BIT_FIELD_TYPE(NODE) \
    3019                 :             :   (FIELD_DECL_CHECK (NODE)->field_decl.bit_field_type)
    3020                 :             : 
    3021                 :             : /* In a FIELD_DECL of a RECORD_TYPE, this is a pointer to the storage
    3022                 :             :    representative FIELD_DECL.  */
    3023                 :             : #define DECL_BIT_FIELD_REPRESENTATIVE(NODE) \
    3024                 :             :   (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
    3025                 :             : 
    3026                 :             : /* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which
    3027                 :             :    if nonzero, indicates that the field occupies the type.  */
    3028                 :             : #define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
    3029                 :             : 
    3030                 :             : /* For FIELD_DECLs, off_align holds the number of low-order bits of
    3031                 :             :    DECL_FIELD_OFFSET which are known to be always zero.
    3032                 :             :    DECL_OFFSET_ALIGN thus returns the alignment that DECL_FIELD_OFFSET
    3033                 :             :    has.  */
    3034                 :             : #define DECL_OFFSET_ALIGN(NODE) \
    3035                 :             :   (HOST_WIDE_INT_1U << FIELD_DECL_CHECK (NODE)->decl_common.off_align)
    3036                 :             : 
    3037                 :             : /* Specify that DECL_OFFSET_ALIGN(NODE) is X.  */
    3038                 :             : #define SET_DECL_OFFSET_ALIGN(NODE, X) \
    3039                 :             :   (FIELD_DECL_CHECK (NODE)->decl_common.off_align = ffs_hwi (X) - 1)
    3040                 :             : 
    3041                 :             : /* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in
    3042                 :             :    which this FIELD_DECL is defined.  This information is needed when
    3043                 :             :    writing debugging information about vfield and vbase decls for C++.  */
    3044                 :             : #define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext)
    3045                 :             : 
    3046                 :             : /* In a FIELD_DECL, indicates this field should be bit-packed.  */
    3047                 :             : #define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->base.u.bits.packed_flag)
    3048                 :             : 
    3049                 :             : /* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed
    3050                 :             :    specially.  */
    3051                 :             : #define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_1)
    3052                 :             : 
    3053                 :             : /* In a FIELD_DECL, indicates this field should be ignored for ABI decisions
    3054                 :             :    like passing/returning containing struct by value.
    3055                 :             :    Set for C++17 empty base artificial FIELD_DECLs as well as
    3056                 :             :    empty [[no_unique_address]] non-static data members.  */
    3057                 :             : #define DECL_FIELD_ABI_IGNORED(NODE) \
    3058                 :             :   (!DECL_BIT_FIELD (NODE) && (NODE)->decl_common.decl_flag_0)
    3059                 :             : #define SET_DECL_FIELD_ABI_IGNORED(NODE, VAL) \
    3060                 :             :   do {                                                                  \
    3061                 :             :     gcc_checking_assert (!DECL_BIT_FIELD (NODE));                       \
    3062                 :             :     FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_0 = (VAL);                \
    3063                 :             :   } while (0)
    3064                 :             : 
    3065                 :             : /* In a FIELD_DECL, indicates C++ zero-width bitfield that used to be
    3066                 :             :    removed from the IL since PR42217 until PR101539 and by that changed
    3067                 :             :    the ABI on several targets.  This flag is provided so that the backends
    3068                 :             :    can decide on the ABI with zero-width bitfields and emit -Wpsabi
    3069                 :             :    warnings.  */
    3070                 :             : #define DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD(NODE) \
    3071                 :             :   (DECL_BIT_FIELD (NODE) && (NODE)->decl_common.decl_flag_0)
    3072                 :             : #define SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD(NODE, VAL) \
    3073                 :             :   do {                                                                  \
    3074                 :             :     gcc_checking_assert (DECL_BIT_FIELD (NODE));                        \
    3075                 :             :     FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_0 = (VAL);                \
    3076                 :             :   } while (0)
    3077                 :             : 
    3078                 :             : /* Used in a FIELD_DECL to indicate that we cannot form the address of
    3079                 :             :    this component.  This makes it possible for Type-Based Alias Analysis
    3080                 :             :    to disambiguate accesses to this field with indirect accesses using
    3081                 :             :    the field's type:
    3082                 :             : 
    3083                 :             :      struct S { int i; } s;
    3084                 :             :      int *p;
    3085                 :             : 
    3086                 :             :    If the flag is set on 'i', TBAA computes that s.i and *p never conflict.
    3087                 :             : 
    3088                 :             :    From the implementation's viewpoint, the alias set of the type of the
    3089                 :             :    field 'i' (int) will not be recorded as a subset of that of the type of
    3090                 :             :    's' (struct S) in record_component_aliases.  The counterpart is that
    3091                 :             :    accesses to s.i must not be given the alias set of the type of 'i'
    3092                 :             :    (int) but instead directly that of the type of 's' (struct S).  */
    3093                 :             : #define DECL_NONADDRESSABLE_P(NODE) \
    3094                 :             :   (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2)
    3095                 :             : 
    3096                 :             : /* Used in a FIELD_DECL to indicate that this field is padding.  */
    3097                 :             : #define DECL_PADDING_P(NODE) \
    3098                 :             :   (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_3)
    3099                 :             : 
    3100                 :             : /* Used in a FIELD_DECL to indicate whether this field is not a flexible
    3101                 :             :    array member. This is only valid for the last array type field of a
    3102                 :             :    structure.  */
    3103                 :             : #define DECL_NOT_FLEXARRAY(NODE) \
    3104                 :             :   (FIELD_DECL_CHECK (NODE)->decl_common.decl_not_flexarray)
    3105                 :             : 
    3106                 :             : /* A numeric unique identifier for a LABEL_DECL.  The UID allocation is
    3107                 :             :    dense, unique within any one function, and may be used to index arrays.
    3108                 :             :    If the value is -1, then no UID has been assigned.  */
    3109                 :             : #define LABEL_DECL_UID(NODE) \
    3110                 :             :   (LABEL_DECL_CHECK (NODE)->label_decl.label_decl_uid)
    3111                 :             : 
    3112                 :             : /* In a LABEL_DECL, the EH region number for which the label is the
    3113                 :             :    post_landing_pad.  */
    3114                 :             : #define EH_LANDING_PAD_NR(NODE) \
    3115                 :             :   (LABEL_DECL_CHECK (NODE)->label_decl.eh_landing_pad_nr)
    3116                 :             : 
    3117                 :             : /* For a PARM_DECL, records the data type used to pass the argument,
    3118                 :             :    which may be different from the type seen in the program.  */
    3119                 :             : #define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl_common.initial)
    3120                 :             : 
    3121                 :             : /* For PARM_DECL, holds an RTL for the stack slot or register
    3122                 :             :    where the data was actually passed.  */
    3123                 :             : #define DECL_INCOMING_RTL(NODE) \
    3124                 :             :   (PARM_DECL_CHECK (NODE)->parm_decl.incoming_rtl)
    3125                 :             : 
    3126                 :             : /* Nonzero for a given ..._DECL node means that no warnings should be
    3127                 :             :    generated just because this node is unused.  */
    3128                 :             : #define DECL_IN_SYSTEM_HEADER(NODE) \
    3129                 :             :   (in_system_header_at (DECL_SOURCE_LOCATION (NODE)))
    3130                 :             : 
    3131                 :             : /* Used to indicate that the linkage status of this DECL is not yet known,
    3132                 :             :    so it should not be output now.  */
    3133                 :             : #define DECL_DEFER_OUTPUT(NODE) \
    3134                 :             :   (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.defer_output)
    3135                 :             : 
    3136                 :             : /* In a VAR_DECL that's static,
    3137                 :             :    nonzero if the space is in the text section.  */
    3138                 :             : #define DECL_IN_TEXT_SECTION(NODE) \
    3139                 :             :   (VAR_DECL_CHECK (NODE)->decl_with_vis.in_text_section)
    3140                 :             : 
    3141                 :             : /* In a VAR_DECL that's static,
    3142                 :             :    nonzero if it belongs to the global constant pool.  */
    3143                 :             : #define DECL_IN_CONSTANT_POOL(NODE) \
    3144                 :             :   (VAR_DECL_CHECK (NODE)->decl_with_vis.in_constant_pool)
    3145                 :             : 
    3146                 :             : /* Nonzero for a given ..._DECL node means that this node should be
    3147                 :             :    put in .common, if possible.  If a DECL_INITIAL is given, and it
    3148                 :             :    is not error_mark_node, then the decl cannot be put in .common.  */
    3149                 :             : #define DECL_COMMON(NODE) \
    3150                 :             :   (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.common_flag)
    3151                 :             : 
    3152                 :             : /* In a VAR_DECL, nonzero if the decl is a register variable with
    3153                 :             :    an explicit asm specification.  */
    3154                 :             : #define DECL_HARD_REGISTER(NODE)  \
    3155                 :             :   (VAR_DECL_CHECK (NODE)->decl_with_vis.hard_register)
    3156                 :             : 
    3157                 :             :   /* Used to indicate that this DECL has weak linkage.  */
    3158                 :             : #define DECL_WEAK(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.weak_flag)
    3159                 :             : 
    3160                 :             : /* Used to indicate that the DECL is a dllimport.  */
    3161                 :             : #define DECL_DLLIMPORT_P(NODE) \
    3162                 :             :   (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.dllimport_flag)
    3163                 :             : 
    3164                 :             : /* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need
    3165                 :             :    not be put out unless it is needed in this translation unit.
    3166                 :             :    Entities like this are shared across translation units (like weak
    3167                 :             :    entities), but are guaranteed to be generated by any translation
    3168                 :             :    unit that needs them, and therefore need not be put out anywhere
    3169                 :             :    where they are not needed.  DECL_COMDAT is just a hint to the
    3170                 :             :    back-end; it is up to front-ends which set this flag to ensure
    3171                 :             :    that there will never be any harm, other than bloat, in putting out
    3172                 :             :    something which is DECL_COMDAT.  */
    3173                 :             : #define DECL_COMDAT(NODE) \
    3174                 :             :   (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_flag)
    3175                 :             : 
    3176                 :             : #define DECL_COMDAT_GROUP(NODE) \
    3177                 :             :   decl_comdat_group (NODE)
    3178                 :             : 
    3179                 :             : /* Used in TREE_PUBLIC decls to indicate that copies of this DECL in
    3180                 :             :    multiple translation units should be merged.  */
    3181                 :             : #define DECL_ONE_ONLY(NODE) (DECL_COMDAT_GROUP (NODE) != NULL_TREE \
    3182                 :             :                              && (TREE_PUBLIC (NODE) || DECL_EXTERNAL (NODE)))
    3183                 :             : 
    3184                 :             : /* The name of the object as the assembler will see it (but before any
    3185                 :             :    translations made by ASM_OUTPUT_LABELREF).  Often this is the same
    3186                 :             :    as DECL_NAME.  It is an IDENTIFIER_NODE.
    3187                 :             : 
    3188                 :             :    ASSEMBLER_NAME of TYPE_DECLS may store global name of type used for
    3189                 :             :    One Definition Rule based type merging at LTO.  It is computed only for
    3190                 :             :    LTO compilation and C++.  */
    3191                 :             : #define DECL_ASSEMBLER_NAME(NODE) decl_assembler_name (NODE)
    3192                 :             : 
    3193                 :             : /* Raw accessor for DECL_ASSEMBLE_NAME.  */
    3194                 :             : #define DECL_ASSEMBLER_NAME_RAW(NODE) \
    3195                 :             :   (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name)
    3196                 :             : 
    3197                 :             : /* Return true if NODE is a NODE that can contain a DECL_ASSEMBLER_NAME.
    3198                 :             :    This is true of all DECL nodes except FIELD_DECL.  */
    3199                 :             : #define HAS_DECL_ASSEMBLER_NAME_P(NODE) \
    3200                 :             :   (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WITH_VIS))
    3201                 :             : 
    3202                 :             : /* Returns nonzero if the DECL_ASSEMBLER_NAME for NODE has been set.  If zero,
    3203                 :             :    the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set
    3204                 :             :    yet.  */
    3205                 :             : #define DECL_ASSEMBLER_NAME_SET_P(NODE) \
    3206                 :             :   (DECL_ASSEMBLER_NAME_RAW (NODE) != NULL_TREE)
    3207                 :             : 
    3208                 :             : /* Set the DECL_ASSEMBLER_NAME for NODE to NAME.  */
    3209                 :             : #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
    3210                 :             :   overwrite_decl_assembler_name (NODE, NAME)
    3211                 :             : 
    3212                 :             : /* Copy the DECL_ASSEMBLER_NAME from SRC_DECL to DST_DECL.  Note that
    3213                 :             :    if SRC_DECL's DECL_ASSEMBLER_NAME has not yet been set, using this
    3214                 :             :    macro will not cause the DECL_ASSEMBLER_NAME to be set, but will
    3215                 :             :    clear DECL_ASSEMBLER_NAME of DST_DECL, if it was already set.  In
    3216                 :             :    other words, the semantics of using this macro, are different than
    3217                 :             :    saying:
    3218                 :             : 
    3219                 :             :      SET_DECL_ASSEMBLER_NAME(DST_DECL, DECL_ASSEMBLER_NAME (SRC_DECL))
    3220                 :             : 
    3221                 :             :    which will try to set the DECL_ASSEMBLER_NAME for SRC_DECL.  */
    3222                 :             : 
    3223                 :             : #define COPY_DECL_ASSEMBLER_NAME(SRC_DECL, DST_DECL)                    \
    3224                 :             :   SET_DECL_ASSEMBLER_NAME (DST_DECL, DECL_ASSEMBLER_NAME_RAW (SRC_DECL))
    3225                 :             : 
    3226                 :             : /* Records the section name in a section attribute.  Used to pass
    3227                 :             :    the name from decl_attributes to make_function_rtl and make_decl_rtl.  */
    3228                 :             : #define DECL_SECTION_NAME(NODE) decl_section_name (NODE)
    3229                 :             : 
    3230                 :             : /* Nonzero in a decl means that the gimplifier has seen (or placed)
    3231                 :             :    this variable in a BIND_EXPR.  */
    3232                 :             : #define DECL_SEEN_IN_BIND_EXPR_P(NODE) \
    3233                 :             :   (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.seen_in_bind_expr)
    3234                 :             : 
    3235                 :             : /* Value of the decls's visibility attribute */
    3236                 :             : #define DECL_VISIBILITY(NODE) \
    3237                 :             :   (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility)
    3238                 :             : 
    3239                 :             : /* Nonzero means that the decl (or an enclosing scope) had its
    3240                 :             :    visibility specified rather than being inferred.  */
    3241                 :             : #define DECL_VISIBILITY_SPECIFIED(NODE) \
    3242                 :             :   (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility_specified)
    3243                 :             : 
    3244                 :             : /* In a VAR_DECL, the model to use if the data should be allocated from
    3245                 :             :    thread-local storage.  */
    3246                 :             : #define DECL_TLS_MODEL(NODE) decl_tls_model (NODE)
    3247                 :             : 
    3248                 :             : /* In a VAR_DECL, nonzero if the data should be allocated from
    3249                 :             :    thread-local storage.  */
    3250                 :             : #define DECL_THREAD_LOCAL_P(NODE) \
    3251                 :             :   ((TREE_STATIC (NODE) || DECL_EXTERNAL (NODE)) && decl_tls_model (NODE) >= TLS_MODEL_REAL)
    3252                 :             : 
    3253                 :             : /* In a non-local VAR_DECL with static storage duration, true if the
    3254                 :             :    variable has an initialization priority.  If false, the variable
    3255                 :             :    will be initialized at the DEFAULT_INIT_PRIORITY.  */
    3256                 :             : #define DECL_HAS_INIT_PRIORITY_P(NODE) \
    3257                 :             :   (VAR_DECL_CHECK (NODE)->decl_with_vis.init_priority_p)
    3258                 :             : 
    3259                 :             : extern tree decl_debug_expr_lookup (tree);
    3260                 :             : extern void decl_debug_expr_insert (tree, tree);
    3261                 :             : 
    3262                 :             : /* For VAR_DECL, this is set to an expression that it was split from.  */
    3263                 :             : #define DECL_HAS_DEBUG_EXPR_P(NODE) \
    3264                 :             :   (VAR_DECL_CHECK (NODE)->decl_common.debug_expr_is_from)
    3265                 :             : #define DECL_DEBUG_EXPR(NODE) \
    3266                 :             :   (decl_debug_expr_lookup (VAR_DECL_CHECK (NODE)))
    3267                 :             : 
    3268                 :             : #define SET_DECL_DEBUG_EXPR(NODE, VAL) \
    3269                 :             :   (decl_debug_expr_insert (VAR_DECL_CHECK (NODE), VAL))
    3270                 :             : 
    3271                 :             : extern priority_type decl_init_priority_lookup (tree);
    3272                 :             : extern priority_type decl_fini_priority_lookup (tree);
    3273                 :             : extern void decl_init_priority_insert (tree, priority_type);
    3274                 :             : extern void decl_fini_priority_insert (tree, priority_type);
    3275                 :             : 
    3276                 :             : /* For a VAR_DECL or FUNCTION_DECL the initialization priority of
    3277                 :             :    NODE.  */
    3278                 :             : #define DECL_INIT_PRIORITY(NODE) \
    3279                 :             :   (decl_init_priority_lookup (NODE))
    3280                 :             : /* Set the initialization priority for NODE to VAL.  */
    3281                 :             : #define SET_DECL_INIT_PRIORITY(NODE, VAL) \
    3282                 :             :   (decl_init_priority_insert (NODE, VAL))
    3283                 :             : 
    3284                 :             : /* For a FUNCTION_DECL the finalization priority of NODE.  */
    3285                 :             : #define DECL_FINI_PRIORITY(NODE) \
    3286                 :             :   (decl_fini_priority_lookup (NODE))
    3287                 :             : /* Set the finalization priority for NODE to VAL.  */
    3288                 :             : #define SET_DECL_FINI_PRIORITY(NODE, VAL) \
    3289                 :             :   (decl_fini_priority_insert (NODE, VAL))
    3290                 :             : 
    3291                 :             : /* The initialization priority for entities for which no explicit
    3292                 :             :    initialization priority has been specified.  */
    3293                 :             : #define DEFAULT_INIT_PRIORITY 65535
    3294                 :             : 
    3295                 :             : /* The maximum allowed initialization priority.  */
    3296                 :             : #define MAX_INIT_PRIORITY 65535
    3297                 :             : 
    3298                 :             : /* The largest priority value reserved for use by system runtime
    3299                 :             :    libraries.  */
    3300                 :             : #define MAX_RESERVED_INIT_PRIORITY 100
    3301                 :             : 
    3302                 :             : /* In a VAR_DECL, nonzero if this is a global variable for VOPs.  */
    3303                 :             : #define VAR_DECL_IS_VIRTUAL_OPERAND(NODE) \
    3304                 :             :   (VAR_DECL_CHECK (NODE)->base.u.bits.saturating_flag)
    3305                 :             : 
    3306                 :             : /* In a VAR_DECL, nonzero if this is a non-local frame structure.  */
    3307                 :             : #define DECL_NONLOCAL_FRAME(NODE)  \
    3308                 :             :   (VAR_DECL_CHECK (NODE)->base.default_def_flag)
    3309                 :             : 
    3310                 :             : /* In a VAR_DECL, nonzero if this variable is not aliased by any pointer.  */
    3311                 :             : #define DECL_NONALIASED(NODE) \
    3312                 :             :   (VAR_DECL_CHECK (NODE)->base.nothrow_flag)
    3313                 :             : 
    3314                 :             : /* In a VAR_DECL, nonzero if this variable is not required to have a distinct
    3315                 :             :    address from other variables with the same constant value.  In other words,
    3316                 :             :    consider -fmerge-all-constants to be on for this VAR_DECL.  */
    3317                 :             : #define DECL_MERGEABLE(NODE) \
    3318                 :             :   (VAR_DECL_CHECK (NODE)->decl_common.decl_flag_3)
    3319                 :             : 
    3320                 :             : /* This field is used to reference anything in decl.result and is meant only
    3321                 :             :    for use by the garbage collector.  */
    3322                 :             : #define DECL_RESULT_FLD(NODE) \
    3323                 :             :   (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.result)
    3324                 :             : 
    3325                 :             : /* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways.
    3326                 :             :    Before the struct containing the FUNCTION_DECL is laid out,
    3327                 :             :    DECL_VINDEX may point to a FUNCTION_DECL in a base class which
    3328                 :             :    is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual
    3329                 :             :    function.  When the class is laid out, this pointer is changed
    3330                 :             :    to an INTEGER_CST node which is suitable for use as an index
    3331                 :             :    into the virtual function table. */
    3332                 :             : #define DECL_VINDEX(NODE) \
    3333                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.vindex)
    3334                 :             : 
    3335                 :             : /* In FUNCTION_DECL, holds the decl for the return value.  */
    3336                 :             : #define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl_non_common.result)
    3337                 :             : 
    3338                 :             : /* In a FUNCTION_DECL, nonzero if the function cannot be inlined.  */
    3339                 :             : #define DECL_UNINLINABLE(NODE) \
    3340                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.uninlinable)
    3341                 :             : 
    3342                 :             : /* In a FUNCTION_DECL, the saved representation of the body of the
    3343                 :             :    entire function.  */
    3344                 :             : #define DECL_SAVED_TREE(NODE) \
    3345                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.saved_tree)
    3346                 :             : 
    3347                 :             : /* Nonzero in a FUNCTION_DECL means this function should be treated
    3348                 :             :    as if it were a malloc, meaning it returns a pointer that is
    3349                 :             :    not an alias.  */
    3350                 :             : #define DECL_IS_MALLOC(NODE) \
    3351                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.malloc_flag)
    3352                 :             : 
    3353                 :             : /* Macro for direct set and get of function_decl.decl_type.  */
    3354                 :             : #define FUNCTION_DECL_DECL_TYPE(NODE) \
    3355                 :             :   (NODE->function_decl.decl_type)
    3356                 :             : 
    3357                 :             : /* Set decl_type of a DECL.  Set it to T when SET is true, or reset
    3358                 :             :    it to NONE.  */
    3359                 :             : 
    3360                 :             : inline void
    3361                 :     2400827 : set_function_decl_type (tree decl, function_decl_type t, bool set)
    3362                 :             : {
    3363                 :     2400827 :   if (set)
    3364                 :             :     {
    3365                 :     1889263 :       gcc_assert (FUNCTION_DECL_DECL_TYPE (decl) == NONE
    3366                 :             :                   || FUNCTION_DECL_DECL_TYPE (decl) == t);
    3367                 :     1889263 :       FUNCTION_DECL_DECL_TYPE (decl) = t;
    3368                 :             :     }
    3369                 :      511564 :   else if (FUNCTION_DECL_DECL_TYPE (decl) == t)
    3370                 :          68 :     FUNCTION_DECL_DECL_TYPE (decl) = NONE;
    3371                 :     2400827 : }
    3372                 :             : 
    3373                 :             : /* Nonzero in a FUNCTION_DECL means this function is a replaceable
    3374                 :             :    function (like replaceable operators new or delete).  */
    3375                 :             : #define DECL_IS_REPLACEABLE_OPERATOR(NODE)\
    3376                 :             :    (FUNCTION_DECL_CHECK (NODE)->function_decl.replaceable_operator)
    3377                 :             : 
    3378                 :             : /* Nonzero in a FUNCTION_DECL means this function should be treated as
    3379                 :             :    C++ operator new, meaning that it returns a pointer for which we
    3380                 :             :    should not use type based aliasing.  */
    3381                 :             : #define DECL_IS_OPERATOR_NEW_P(NODE) \
    3382                 :             :   (FUNCTION_DECL_DECL_TYPE (FUNCTION_DECL_CHECK (NODE)) == OPERATOR_NEW)
    3383                 :             : 
    3384                 :             : #define DECL_IS_REPLACEABLE_OPERATOR_NEW_P(NODE) \
    3385                 :             :   (DECL_IS_OPERATOR_NEW_P (NODE) && DECL_IS_REPLACEABLE_OPERATOR (NODE))
    3386                 :             : 
    3387                 :             : #define DECL_SET_IS_OPERATOR_NEW(NODE, VAL) \
    3388                 :             :   set_function_decl_type (FUNCTION_DECL_CHECK (NODE), OPERATOR_NEW, VAL)
    3389                 :             : 
    3390                 :             : /* Nonzero in a FUNCTION_DECL means this function should be treated as
    3391                 :             :    C++ operator delete.  */
    3392                 :             : #define DECL_IS_OPERATOR_DELETE_P(NODE) \
    3393                 :             :   (FUNCTION_DECL_DECL_TYPE (FUNCTION_DECL_CHECK (NODE)) == OPERATOR_DELETE)
    3394                 :             : 
    3395                 :             : #define DECL_SET_IS_OPERATOR_DELETE(NODE, VAL) \
    3396                 :             :   set_function_decl_type (FUNCTION_DECL_CHECK (NODE), OPERATOR_DELETE, VAL)
    3397                 :             : 
    3398                 :             : /* Nonzero in a FUNCTION_DECL means this function may return more
    3399                 :             :    than once.  */
    3400                 :             : #define DECL_IS_RETURNS_TWICE(NODE) \
    3401                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.returns_twice_flag)
    3402                 :             : 
    3403                 :             : /* Nonzero in a FUNCTION_DECL means this function should be treated
    3404                 :             :    as "pure" function (like const function, but may read global memory).
    3405                 :             :    Note that being pure or const for a function is orthogonal to being
    3406                 :             :    nothrow, i.e. it is valid to have DECL_PURE_P set and TREE_NOTHROW
    3407                 :             :    cleared.  */
    3408                 :             : #define DECL_PURE_P(NODE) (FUNCTION_DECL_CHECK (NODE)->function_decl.pure_flag)
    3409                 :             : 
    3410                 :             : /* Nonzero only if one of TREE_READONLY or DECL_PURE_P is nonzero AND
    3411                 :             :    the const or pure function may not terminate.  When this is nonzero
    3412                 :             :    for a const or pure function, it can be dealt with by cse passes
    3413                 :             :    but cannot be removed by dce passes since you are not allowed to
    3414                 :             :    change an infinite looping program into one that terminates without
    3415                 :             :    error.  */
    3416                 :             : #define DECL_LOOPING_CONST_OR_PURE_P(NODE) \
    3417                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.looping_const_or_pure_flag)
    3418                 :             : 
    3419                 :             : /* Nonzero in a FUNCTION_DECL means this function should be treated
    3420                 :             :    as "novops" function (function that does not read global memory,
    3421                 :             :    but may have arbitrary side effects).  */
    3422                 :             : #define DECL_IS_NOVOPS(NODE) \
    3423                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.novops_flag)
    3424                 :             : 
    3425                 :             : /* Used in FUNCTION_DECLs to indicate that they should be run automatically
    3426                 :             :    at the beginning or end of execution.  */
    3427                 :             : #define DECL_STATIC_CONSTRUCTOR(NODE) \
    3428                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.static_ctor_flag)
    3429                 :             : 
    3430                 :             : #define DECL_STATIC_DESTRUCTOR(NODE) \
    3431                 :             : (FUNCTION_DECL_CHECK (NODE)->function_decl.static_dtor_flag)
    3432                 :             : 
    3433                 :             : /* Used in FUNCTION_DECLs to indicate that function entry and exit should
    3434                 :             :    be instrumented with calls to support routines.  */
    3435                 :             : #define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \
    3436                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.no_instrument_function_entry_exit)
    3437                 :             : 
    3438                 :             : /* Used in FUNCTION_DECLs to indicate that limit-stack-* should be
    3439                 :             :    disabled in this function.  */
    3440                 :             : #define DECL_NO_LIMIT_STACK(NODE) \
    3441                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.no_limit_stack)
    3442                 :             : 
    3443                 :             : /* In a FUNCTION_DECL indicates that a static chain is needed.  */
    3444                 :             : #define DECL_STATIC_CHAIN(NODE) \
    3445                 :             :   (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.regdecl_flag)
    3446                 :             : 
    3447                 :             : /* Nonzero for a decl that cgraph has decided should be inlined into
    3448                 :             :    at least one call site.  It is not meaningful to look at this
    3449                 :             :    directly; always use cgraph_function_possibly_inlined_p.  */
    3450                 :             : #define DECL_POSSIBLY_INLINED(DECL) \
    3451                 :             :   FUNCTION_DECL_CHECK (DECL)->function_decl.possibly_inlined
    3452                 :             : 
    3453                 :             : /* Nonzero in a FUNCTION_DECL means that this function was declared inline,
    3454                 :             :    such as via the `inline' keyword in C/C++.  This flag controls the linkage
    3455                 :             :    semantics of 'inline'  */
    3456                 :             : #define DECL_DECLARED_INLINE_P(NODE) \
    3457                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.declared_inline_flag)
    3458                 :             : 
    3459                 :             : /* Nonzero in a FUNCTION_DECL means this function should not get
    3460                 :             :    -Winline warnings.  */
    3461                 :             : #define DECL_NO_INLINE_WARNING_P(NODE) \
    3462                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.no_inline_warning_flag)
    3463                 :             : 
    3464                 :             : /* Nonzero if a FUNCTION_CODE is a TM load/store.  */
    3465                 :             : #define BUILTIN_TM_LOAD_STORE_P(FN) \
    3466                 :             :   ((FN) >= BUILT_IN_TM_STORE_1 && (FN) <= BUILT_IN_TM_LOAD_RFW_LDOUBLE)
    3467                 :             : 
    3468                 :             : /* Nonzero if a FUNCTION_CODE is a TM load.  */
    3469                 :             : #define BUILTIN_TM_LOAD_P(FN) \
    3470                 :             :   ((FN) >= BUILT_IN_TM_LOAD_1 && (FN) <= BUILT_IN_TM_LOAD_RFW_LDOUBLE)
    3471                 :             : 
    3472                 :             : /* Nonzero if a FUNCTION_CODE is a TM store.  */
    3473                 :             : #define BUILTIN_TM_STORE_P(FN) \
    3474                 :             :   ((FN) >= BUILT_IN_TM_STORE_1 && (FN) <= BUILT_IN_TM_STORE_WAW_LDOUBLE)
    3475                 :             : 
    3476                 :             : #define CASE_BUILT_IN_TM_LOAD(FN)       \
    3477                 :             :   case BUILT_IN_TM_LOAD_##FN:           \
    3478                 :             :   case BUILT_IN_TM_LOAD_RAR_##FN:       \
    3479                 :             :   case BUILT_IN_TM_LOAD_RAW_##FN:       \
    3480                 :             :   case BUILT_IN_TM_LOAD_RFW_##FN
    3481                 :             : 
    3482                 :             : #define CASE_BUILT_IN_TM_STORE(FN)      \
    3483                 :             :   case BUILT_IN_TM_STORE_##FN:          \
    3484                 :             :   case BUILT_IN_TM_STORE_WAR_##FN:      \
    3485                 :             :   case BUILT_IN_TM_STORE_WAW_##FN
    3486                 :             : 
    3487                 :             : /* Nonzero in a FUNCTION_DECL that should be always inlined by the inliner
    3488                 :             :    disregarding size and cost heuristics.  This is equivalent to using
    3489                 :             :    the always_inline attribute without the required diagnostics if the
    3490                 :             :    function cannot be inlined.  */
    3491                 :             : #define DECL_DISREGARD_INLINE_LIMITS(NODE) \
    3492                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.disregard_inline_limits)
    3493                 :             : 
    3494                 :             : extern vec<tree, va_gc> **decl_debug_args_lookup (tree);
    3495                 :             : extern vec<tree, va_gc> **decl_debug_args_insert (tree);
    3496                 :             : 
    3497                 :             : /* Nonzero if a FUNCTION_DECL has DEBUG arguments attached to it.  */
    3498                 :             : #define DECL_HAS_DEBUG_ARGS_P(NODE) \
    3499                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.has_debug_args_flag)
    3500                 :             : 
    3501                 :             : /* For FUNCTION_DECL, this holds a pointer to a structure ("struct function")
    3502                 :             :    that describes the status of this function.  */
    3503                 :             : #define DECL_STRUCT_FUNCTION(NODE) \
    3504                 :             :   (FUNCTION_DECL_CHECK (NODE)->function_decl.f)
    3505                 :             : 
    3506                 :             : /* For a builtin function, identify which part of the compiler defined it.  */
    3507                 :             : #define DECL_BUILT_IN_CLASS(NODE) \
    3508                 :             :    ((built_in_class) FUNCTION_DECL_CHECK (NODE)->function_decl.built_in_class)
    3509                 :             : 
    3510                 :             : /* In FUNCTION_DECL, a chain of ..._DECL nodes.  */
    3511                 :             : #define DECL_ARGUMENTS(NODE) \
    3512                 :             :    (FUNCTION_DECL_CHECK (NODE)->function_decl.arguments)
    3513                 :             : 
    3514                 :             : /* In FUNCTION_DECL, the function specific target options to use when compiling
    3515                 :             :    this function.  */
    3516                 :             : #define DECL_FUNCTION_SPECIFIC_TARGET(NODE) \
    3517                 :             :    (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_target)
    3518                 :             : 
    3519                 :             : /* In FUNCTION_DECL, the function specific optimization options to use when
    3520                 :             :    compiling this function.  */
    3521                 :             : #define DECL_FUNCTION_SPECIFIC_OPTIMIZATION(NODE) \
    3522                 :             :    (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_optimization)
    3523                 :             : 
    3524                 :             : /* In FUNCTION_DECL, this is set if this function has other versions generated
    3525                 :             :    to support different architecture feature sets, e.g. using "target" or
    3526                 :             :    "target_version" attributes.  */
    3527                 :             : #define DECL_FUNCTION_VERSIONED(NODE)\
    3528                 :             :    (FUNCTION_DECL_CHECK (NODE)->function_decl.versioned_function)
    3529                 :             : 
    3530                 :             : /* In FUNCTION_DECL, this is set if this function is a C++ constructor.
    3531                 :             :    Devirtualization machinery uses this knowledge for determing type of the
    3532                 :             :    object constructed.  Also we assume that constructor address is not
    3533                 :             :    important.  */
    3534                 :             : #define DECL_CXX_CONSTRUCTOR_P(NODE)\
    3535                 :             :    (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cxx_constructor)
    3536                 :             : 
    3537                 :             : /* In FUNCTION_DECL, this is set if this function is a C++ destructor.
    3538                 :             :    Devirtualization machinery uses this to track types in destruction.  */
    3539                 :             : #define DECL_CXX_DESTRUCTOR_P(NODE)\
    3540                 :             :    (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cxx_destructor)
    3541                 :             : 
    3542                 :             : /* In FUNCTION_DECL, this is set if this function is a lambda function.  */
    3543                 :             : #define DECL_LAMBDA_FUNCTION_P(NODE) \
    3544                 :             :   (FUNCTION_DECL_DECL_TYPE (FUNCTION_DECL_CHECK (NODE)) == LAMBDA_FUNCTION)
    3545                 :             : 
    3546                 :             : #define DECL_SET_LAMBDA_FUNCTION(NODE, VAL) \
    3547                 :             :   set_function_decl_type (FUNCTION_DECL_CHECK (NODE), LAMBDA_FUNCTION, VAL)
    3548                 :             : 
    3549                 :             : /* In FUNCTION_DECL that represent an virtual method this is set when
    3550                 :             :    the method is final.  */
    3551                 :             : #define DECL_FINAL_P(NODE)\
    3552                 :             :    (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.final)
    3553                 :             : 
    3554                 :             : /* The source language of the translation-unit.  */
    3555                 :             : #define TRANSLATION_UNIT_LANGUAGE(NODE) \
    3556                 :             :   (TRANSLATION_UNIT_DECL_CHECK (NODE)->translation_unit_decl.language)
    3557                 :             : 
    3558                 :             : /* TRANSLATION_UNIT_DECL inherits from DECL_MINIMAL.  */
    3559                 :             : 
    3560                 :             : /* For a TYPE_DECL, holds the "original" type.  (TREE_TYPE has the copy.) */
    3561                 :             : #define DECL_ORIGINAL_TYPE(NODE) \
    3562                 :             :   (TYPE_DECL_CHECK (NODE)->decl_non_common.result)
    3563                 :             : 
    3564                 :             : /* In a TYPE_DECL nonzero means the detail info about this type is not dumped
    3565                 :             :    into stabs.  Instead it will generate cross reference ('x') of names.
    3566                 :             :    This uses the same flag as DECL_EXTERNAL.  */
    3567                 :             : #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
    3568                 :             :   (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_1)
    3569                 :             : 
    3570                 :             : /* Getter of the imported declaration associated to the
    3571                 :             :    IMPORTED_DECL node.  */
    3572                 :             : #define IMPORTED_DECL_ASSOCIATED_DECL(NODE) \
    3573                 :             : (DECL_INITIAL (IMPORTED_DECL_CHECK (NODE)))
    3574                 :             : 
    3575                 :             : /* Getter of the symbol declaration associated with the
    3576                 :             :    NAMELIST_DECL node.  */
    3577                 :             : #define NAMELIST_DECL_ASSOCIATED_DECL(NODE) \
    3578                 :             :   (DECL_INITIAL (NODE))
    3579                 :             : 
    3580                 :             : /* A STATEMENT_LIST chains statements together in GENERIC and GIMPLE.
    3581                 :             :    To reduce overhead, the nodes containing the statements are not trees.
    3582                 :             :    This avoids the overhead of tree_common on all linked list elements.
    3583                 :             : 
    3584                 :             :    Use the interface in tree-iterator.h to access this node.  */
    3585                 :             : 
    3586                 :             : #define STATEMENT_LIST_HEAD(NODE) \
    3587                 :             :   (STATEMENT_LIST_CHECK (NODE)->stmt_list.head)
    3588                 :             : #define STATEMENT_LIST_TAIL(NODE) \
    3589                 :             :   (STATEMENT_LIST_CHECK (NODE)->stmt_list.tail)
    3590                 :             : 
    3591                 :             : #define TREE_OPTIMIZATION(NODE) \
    3592                 :             :   (OPTIMIZATION_NODE_CHECK (NODE)->optimization.opts)
    3593                 :             : 
    3594                 :             : #define TREE_OPTIMIZATION_OPTABS(NODE) \
    3595                 :             :   (OPTIMIZATION_NODE_CHECK (NODE)->optimization.optabs)
    3596                 :             : 
    3597                 :             : #define TREE_OPTIMIZATION_BASE_OPTABS(NODE) \
    3598                 :             :   (OPTIMIZATION_NODE_CHECK (NODE)->optimization.base_optabs)
    3599                 :             : 
    3600                 :             : /* Return a tree node that encapsulates the optimization options in OPTS
    3601                 :             :    and OPTS_SET.  */
    3602                 :             : extern tree build_optimization_node (struct gcc_options *opts,
    3603                 :             :                                      struct gcc_options *opts_set);
    3604                 :             : 
    3605                 :             : #define TREE_TARGET_OPTION(NODE) \
    3606                 :             :   (TARGET_OPTION_NODE_CHECK (NODE)->target_option.opts)
    3607                 :             : 
    3608                 :             : #define TREE_TARGET_GLOBALS(NODE) \
    3609                 :             :   (TARGET_OPTION_NODE_CHECK (NODE)->target_option.globals)
    3610                 :             : 
    3611                 :             : /* Return a tree node that encapsulates the target options in OPTS and
    3612                 :             :    OPTS_SET.  */
    3613                 :             : extern tree build_target_option_node (struct gcc_options *opts,
    3614                 :             :                                       struct gcc_options *opts_set);
    3615                 :             : 
    3616                 :             : extern void prepare_target_option_nodes_for_pch (void);
    3617                 :             : 
    3618                 :             : #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
    3619                 :             : 
    3620                 :             : inline tree
    3621                 : >72966*10^7 : tree_check (tree __t, const char *__f, int __l, const char *__g, tree_code __c)
    3622                 :             : {
    3623                 : >68948*10^7 :   if (TREE_CODE (__t) != __c)
    3624                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c, 0);
    3625                 : >62672*10^7 :   return __t;
    3626                 :             : }
    3627                 :             : 
    3628                 :             : inline tree
    3629                 : 88610052459 : tree_not_check (tree __t, const char *__f, int __l, const char *__g,
    3630                 :             :                 enum tree_code __c)
    3631                 :             : {
    3632                 : 53064949726 :   if (TREE_CODE (__t) == __c)
    3633                 :           0 :     tree_not_check_failed (__t, __f, __l, __g, __c, 0);
    3634                 : 52632943771 :   return __t;
    3635                 :             : }
    3636                 :             : 
    3637                 :             : inline tree
    3638                 : 34920622003 : tree_check2 (tree __t, const char *__f, int __l, const char *__g,
    3639                 :             :              enum tree_code __c1, enum tree_code __c2)
    3640                 :             : {
    3641                 : 34920622003 :   if (TREE_CODE (__t) != __c1
    3642                 : 15382965128 :       && TREE_CODE (__t) != __c2)
    3643                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, 0);
    3644                 : 34920622003 :   return __t;
    3645                 :             : }
    3646                 :             : 
    3647                 :             : inline tree
    3648                 : 84755369993 : tree_not_check2 (tree __t, const char *__f, int __l, const char *__g,
    3649                 :             :                  enum tree_code __c1, enum tree_code __c2)
    3650                 :             : {
    3651                 : 84755369993 :   if (TREE_CODE (__t) == __c1
    3652                 : 84755369993 :       || TREE_CODE (__t) == __c2)
    3653                 :           0 :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, 0);
    3654                 : 84755369993 :   return __t;
    3655                 :             : }
    3656                 :             : 
    3657                 :             : inline tree
    3658                 : 49227392489 : tree_check3 (tree __t, const char *__f, int __l, const char *__g,
    3659                 :             :              enum tree_code __c1, enum tree_code __c2, enum tree_code __c3)
    3660                 :             : {
    3661                 : 49227392489 :   if (TREE_CODE (__t) != __c1
    3662                 :  1924220258 :       && TREE_CODE (__t) != __c2
    3663                 :   566386291 :       && TREE_CODE (__t) != __c3)
    3664                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, 0);
    3665                 : 49227392489 :   return __t;
    3666                 :             : }
    3667                 :             : 
    3668                 :             : inline tree
    3669                 :             : tree_not_check3 (tree __t, const char *__f, int __l, const char *__g,
    3670                 :             :                  enum tree_code __c1, enum tree_code __c2, enum tree_code __c3)
    3671                 :             : {
    3672                 :             :   if (TREE_CODE (__t) == __c1
    3673                 :             :       || TREE_CODE (__t) == __c2
    3674                 :             :       || TREE_CODE (__t) == __c3)
    3675                 :             :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, 0);
    3676                 :             :   return __t;
    3677                 :             : }
    3678                 :             : 
    3679                 :             : inline tree
    3680                 : 10173687796 : tree_check4 (tree __t, const char *__f, int __l, const char *__g,
    3681                 :             :              enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    3682                 :             :              enum tree_code __c4)
    3683                 :             : {
    3684                 : 10173687796 :   if (TREE_CODE (__t) != __c1
    3685                 :  8351728789 :       && TREE_CODE (__t) != __c2
    3686                 :  8318339599 :       && TREE_CODE (__t) != __c3
    3687                 :  8309770403 :       && TREE_CODE (__t) != __c4)
    3688                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, 0);
    3689                 : 10173687796 :   return __t;
    3690                 :             : }
    3691                 :             : 
    3692                 :             : inline tree
    3693                 :   688422173 : tree_not_check4 (tree __t, const char *__f, int __l, const char *__g,
    3694                 :             :                  enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    3695                 :             :                  enum tree_code __c4)
    3696                 :             : {
    3697                 :   688422173 :   if (TREE_CODE (__t) == __c1
    3698                 :   688422173 :       || TREE_CODE (__t) == __c2
    3699                 :   688422173 :       || TREE_CODE (__t) == __c3
    3700                 :   688422173 :       || TREE_CODE (__t) == __c4)
    3701                 :           0 :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, 0);
    3702                 :   688422173 :   return __t;
    3703                 :             : }
    3704                 :             : 
    3705                 :             : inline tree
    3706                 :  1120382265 : tree_check5 (tree __t, const char *__f, int __l, const char *__g,
    3707                 :             :              enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    3708                 :             :              enum tree_code __c4, enum tree_code __c5)
    3709                 :             : {
    3710                 :  1120382265 :   if (TREE_CODE (__t) != __c1
    3711                 :  1083241631 :       && TREE_CODE (__t) != __c2
    3712                 :   454139822 :       && TREE_CODE (__t) != __c3
    3713                 :   363158107 :       && TREE_CODE (__t) != __c4
    3714                 :      545126 :       && TREE_CODE (__t) != __c5)
    3715                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, 0);
    3716                 :  1120382265 :   return __t;
    3717                 :             : }
    3718                 :             : 
    3719                 :             : inline tree
    3720                 :             : tree_not_check5 (tree __t, const char *__f, int __l, const char *__g,
    3721                 :             :                  enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    3722                 :             :                  enum tree_code __c4, enum tree_code __c5)
    3723                 :             : {
    3724                 :             :   if (TREE_CODE (__t) == __c1
    3725                 :             :       || TREE_CODE (__t) == __c2
    3726                 :             :       || TREE_CODE (__t) == __c3
    3727                 :             :       || TREE_CODE (__t) == __c4
    3728                 :             :       || TREE_CODE (__t) == __c5)
    3729                 :             :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, 0);
    3730                 :             :   return __t;
    3731                 :             : }
    3732                 :             : 
    3733                 :             : inline tree
    3734                 :  6303223788 : tree_check6 (tree __t, const char *__f, int __l, const char *__g,
    3735                 :             :              enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    3736                 :             :              enum tree_code __c4, enum tree_code __c5, enum tree_code __c6)
    3737                 :             : {
    3738                 :  6303223788 :   if (TREE_CODE (__t) != __c1
    3739                 :   307846506 :       && TREE_CODE (__t) != __c2
    3740                 :   218277980 :       && TREE_CODE (__t) != __c3
    3741                 :   112392044 :       && TREE_CODE (__t) != __c4
    3742                 :    16522416 :       && TREE_CODE (__t) != __c5
    3743                 :    16522416 :       && TREE_CODE (__t) != __c6)
    3744                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, __c6,
    3745                 :             :                        0);
    3746                 :  6303223788 :   return __t;
    3747                 :             : }
    3748                 :             : 
    3749                 :             : inline tree
    3750                 :             : tree_not_check6 (tree __t, const char *__f, int __l, const char *__g,
    3751                 :             :                  enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    3752                 :             :                  enum tree_code __c4, enum tree_code __c5, enum tree_code __c6)
    3753                 :             : {
    3754                 :             :   if (TREE_CODE (__t) == __c1
    3755                 :             :       || TREE_CODE (__t) == __c2
    3756                 :             :       || TREE_CODE (__t) == __c3
    3757                 :             :       || TREE_CODE (__t) == __c4
    3758                 :             :       || TREE_CODE (__t) == __c5
    3759                 :             :       || TREE_CODE (__t) == __c6)
    3760                 :             :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5,
    3761                 :             :                            __c6, 0);
    3762                 :             :   return __t;
    3763                 :             : }
    3764                 :             : 
    3765                 :             : inline tree
    3766                 : >13643*10^8 : contains_struct_check (tree __t, const enum tree_node_structure_enum __s,
    3767                 :             :                        const char *__f, int __l, const char *__g)
    3768                 :             : {
    3769                 : >13643*10^8 :   if (tree_contains_struct[TREE_CODE (__t)][__s] != 1)
    3770                 :           0 :       tree_contains_struct_check_failed (__t, __s, __f, __l, __g);
    3771                 : >13643*10^8 :   return __t;
    3772                 :             : }
    3773                 :             : 
    3774                 :             : inline tree
    3775                 : >70081*10^7 : tree_class_check (tree __t, const enum tree_code_class __class,
    3776                 :             :                   const char *__f, int __l, const char *__g)
    3777                 :             : {
    3778                 : >70081*10^7 :   if (TREE_CODE_CLASS (TREE_CODE (__t)) != __class)
    3779                 :           0 :     tree_class_check_failed (__t, __class, __f, __l, __g);
    3780                 : >70081*10^7 :   return __t;
    3781                 :             : }
    3782                 :             : 
    3783                 :             : inline tree
    3784                 :     4139303 : tree_range_check (tree __t,
    3785                 :             :                   enum tree_code __code1, enum tree_code __code2,
    3786                 :             :                   const char *__f, int __l, const char *__g)
    3787                 :             : {
    3788                 :     4139303 :   if (TREE_CODE (__t) < __code1 || TREE_CODE (__t) > __code2)
    3789                 :           0 :     tree_range_check_failed (__t, __f, __l, __g, __code1, __code2);
    3790                 :     4139303 :   return __t;
    3791                 :             : }
    3792                 :             : 
    3793                 :             : inline tree
    3794                 :     6475565 : omp_clause_subcode_check (tree __t, enum omp_clause_code __code,
    3795                 :             :                           const char *__f, int __l, const char *__g)
    3796                 :             : {
    3797                 :     6475565 :   if (TREE_CODE (__t) != OMP_CLAUSE)
    3798                 :           0 :     tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
    3799                 :     6475565 :   if (__t->omp_clause.code != __code)
    3800                 :           0 :     omp_clause_check_failed (__t, __f, __l, __g, __code);
    3801                 :     6475565 :   return __t;
    3802                 :             : }
    3803                 :             : 
    3804                 :             : inline tree
    3805                 :     4309558 : omp_clause_range_check (tree __t,
    3806                 :             :                         enum omp_clause_code __code1,
    3807                 :             :                         enum omp_clause_code __code2,
    3808                 :             :                         const char *__f, int __l, const char *__g)
    3809                 :             : {
    3810                 :     4309558 :   if (TREE_CODE (__t) != OMP_CLAUSE)
    3811                 :           0 :     tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
    3812                 :     4309558 :   if ((int) __t->omp_clause.code < (int) __code1
    3813                 :     4309558 :       || (int) __t->omp_clause.code > (int) __code2)
    3814                 :           0 :     omp_clause_range_check_failed (__t, __f, __l, __g, __code1, __code2);
    3815                 :     4309558 :   return __t;
    3816                 :             : }
    3817                 :             : 
    3818                 :             : /* These checks have to be special cased.  */
    3819                 :             : 
    3820                 :             : inline tree
    3821                 : >15129*10^7 : expr_check (tree __t, const char *__f, int __l, const char *__g)
    3822                 :             : {
    3823                 : >15129*10^7 :   char const __c = TREE_CODE_CLASS (TREE_CODE (__t));
    3824                 : >15129*10^7 :   if (!IS_EXPR_CODE_CLASS (__c))
    3825                 :           0 :     tree_class_check_failed (__t, tcc_expression, __f, __l, __g);
    3826                 : >15129*10^7 :   return __t;
    3827                 :             : }
    3828                 :             : 
    3829                 :             : /* These checks have to be special cased.  */
    3830                 :             : 
    3831                 :             : inline tree
    3832                 : 44770973011 : non_type_check (tree __t, const char *__f, int __l, const char *__g)
    3833                 :             : {
    3834                 : 44770973011 :   if (TYPE_P (__t))
    3835                 :           0 :     tree_not_class_check_failed (__t, tcc_type, __f, __l, __g);
    3836                 : 44770973011 :   return __t;
    3837                 :             : }
    3838                 :             : 
    3839                 :             : inline const HOST_WIDE_INT *
    3840                 : 45142383697 : tree_int_cst_elt_check (const_tree __t, int __i,
    3841                 :             :                         const char *__f, int __l, const char *__g)
    3842                 :             : {
    3843                 : 45142383697 :   if (TREE_CODE (__t) != INTEGER_CST)
    3844                 :           0 :     tree_check_failed (__t, __f, __l, __g, INTEGER_CST, 0);
    3845                 : 45142383697 :   if (__i < 0 || __i >= __t->base.u.int_length.extended)
    3846                 :           0 :     tree_int_cst_elt_check_failed (__i, __t->base.u.int_length.extended,
    3847                 :             :                                    __f, __l, __g);
    3848                 : 45142383697 :   return &CONST_CAST_TREE (__t)->int_cst.val[__i];
    3849                 :             : }
    3850                 :             : 
    3851                 :             : inline HOST_WIDE_INT *
    3852                 : 25526471525 : tree_int_cst_elt_check (tree __t, int __i,
    3853                 :             :                         const char *__f, int __l, const char *__g)
    3854                 :             : {
    3855                 : 25526471525 :   if (TREE_CODE (__t) != INTEGER_CST)
    3856                 :           0 :     tree_check_failed (__t, __f, __l, __g, INTEGER_CST, 0);
    3857                 : 25526471525 :   if (__i < 0 || __i >= __t->base.u.int_length.extended)
    3858                 :           0 :     tree_int_cst_elt_check_failed (__i, __t->base.u.int_length.extended,
    3859                 :             :                                    __f, __l, __g);
    3860                 : 25526471525 :   return &CONST_CAST_TREE (__t)->int_cst.val[__i];
    3861                 :             : }
    3862                 :             : 
    3863                 :             : /* Workaround -Wstrict-overflow false positive during profiledbootstrap.  */
    3864                 :             : 
    3865                 :             : # if GCC_VERSION >= 4006
    3866                 :             : #pragma GCC diagnostic push
    3867                 :             : #pragma GCC diagnostic ignored "-Wstrict-overflow"
    3868                 :             : #endif
    3869                 :             : 
    3870                 :             : inline tree *
    3871                 : 78235423680 : tree_vec_elt_check (tree __t, int __i,
    3872                 :             :                     const char *__f, int __l, const char *__g)
    3873                 :             : {
    3874                 : 78235423680 :   if (TREE_CODE (__t) != TREE_VEC)
    3875                 :           0 :     tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
    3876                 : 78235423680 :   if (__i < 0 || __i >= __t->base.u.length)
    3877                 :           0 :     tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
    3878                 : 78235423680 :   return &CONST_CAST_TREE (__t)->vec.a[__i];
    3879                 :             : }
    3880                 :             : 
    3881                 :             : # if GCC_VERSION >= 4006
    3882                 :             : #pragma GCC diagnostic pop
    3883                 :             : #endif
    3884                 :             : 
    3885                 :             : inline tree *
    3886                 :     7367981 : omp_clause_elt_check (tree __t, int __i,
    3887                 :             :                       const char *__f, int __l, const char *__g)
    3888                 :             : {
    3889                 :     7367981 :   if (TREE_CODE (__t) != OMP_CLAUSE)
    3890                 :           0 :     tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
    3891                 :     7367981 :   if (__i < 0 || __i >= omp_clause_num_ops [__t->omp_clause.code])
    3892                 :           0 :     omp_clause_operand_check_failed (__i, __t, __f, __l, __g);
    3893                 :     7367981 :   return &__t->omp_clause.ops[__i];
    3894                 :             : }
    3895                 :             : 
    3896                 :             : /* These checks have to be special cased.  */
    3897                 :             : 
    3898                 :             : inline tree
    3899                 :  2713116660 : any_integral_type_check (tree __t, const char *__f, int __l, const char *__g)
    3900                 :             : {
    3901                 :  2713116660 :   if (!ANY_INTEGRAL_TYPE_P (__t))
    3902                 :           0 :     tree_check_failed (__t, __f, __l, __g, BOOLEAN_TYPE, ENUMERAL_TYPE,
    3903                 :             :                        INTEGER_TYPE, BITINT_TYPE, 0);
    3904                 :  2713116660 :   return __t;
    3905                 :             : }
    3906                 :             : 
    3907                 :             : inline const_tree
    3908                 : >10797*10^7 : tree_check (const_tree __t, const char *__f, int __l, const char *__g,
    3909                 :             :             tree_code __c)
    3910                 :             : {
    3911                 : 63582801642 :   if (TREE_CODE (__t) != __c)
    3912                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c, 0);
    3913                 : 72825546657 :   return __t;
    3914                 :             : }
    3915                 :             : 
    3916                 :             : inline const_tree
    3917                 : 15514557202 : tree_not_check (const_tree __t, const char *__f, int __l, const char *__g,
    3918                 :             :                 enum tree_code __c)
    3919                 :             : {
    3920                 : 13056082783 :   if (TREE_CODE (__t) == __c)
    3921                 :           0 :     tree_not_check_failed (__t, __f, __l, __g, __c, 0);
    3922                 :  6817148429 :   return __t;
    3923                 :             : }
    3924                 :             : 
    3925                 :             : inline const_tree
    3926                 : 14189751744 : tree_check2 (const_tree __t, const char *__f, int __l, const char *__g,
    3927                 :             :              enum tree_code __c1, enum tree_code __c2)
    3928                 :             : {
    3929                 : 14189751744 :   if (TREE_CODE (__t) != __c1
    3930                 :  7969066401 :       && TREE_CODE (__t) != __c2)
    3931                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, 0);
    3932                 : 14189751744 :   return __t;
    3933                 :             : }
    3934                 :             : 
    3935                 :             : inline const_tree
    3936                 :  2910481522 : tree_not_check2 (const_tree __t, const char *__f, int __l, const char *__g,
    3937                 :             :                  enum tree_code __c1, enum tree_code __c2)
    3938                 :             : {
    3939                 :  2910481522 :   if (TREE_CODE (__t) == __c1
    3940                 :  2910481522 :       || TREE_CODE (__t) == __c2)
    3941                 :           0 :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, 0);
    3942                 :  2910481522 :   return __t;
    3943                 :             : }
    3944                 :             : 
    3945                 :             : inline const_tree
    3946                 :  6877626364 : tree_check3 (const_tree __t, const char *__f, int __l, const char *__g,
    3947                 :             :              enum tree_code __c1, enum tree_code __c2, enum tree_code __c3)
    3948                 :             : {
    3949                 :  6877626364 :   if (TREE_CODE (__t) != __c1
    3950                 :   262209417 :       && TREE_CODE (__t) != __c2
    3951                 :   117942761 :       && TREE_CODE (__t) != __c3)
    3952                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, 0);
    3953                 :  6877626364 :   return __t;
    3954                 :             : }
    3955                 :             : 
    3956                 :             : inline const_tree
    3957                 :             : tree_not_check3 (const_tree __t, const char *__f, int __l, const char *__g,
    3958                 :             :                  enum tree_code __c1, enum tree_code __c2, enum tree_code __c3)
    3959                 :             : {
    3960                 :             :   if (TREE_CODE (__t) == __c1
    3961                 :             :       || TREE_CODE (__t) == __c2
    3962                 :             :       || TREE_CODE (__t) == __c3)
    3963                 :             :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, 0);
    3964                 :             :   return __t;
    3965                 :             : }
    3966                 :             : 
    3967                 :             : inline const_tree
    3968                 :   239716440 : tree_check4 (const_tree __t, const char *__f, int __l, const char *__g,
    3969                 :             :              enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    3970                 :             :              enum tree_code __c4)
    3971                 :             : {
    3972                 :   239716440 :   if (TREE_CODE (__t) != __c1
    3973                 :     4921567 :       && TREE_CODE (__t) != __c2
    3974                 :     2190102 :       && TREE_CODE (__t) != __c3
    3975                 :     2190102 :       && TREE_CODE (__t) != __c4)
    3976                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, 0);
    3977                 :   239716440 :   return __t;
    3978                 :             : }
    3979                 :             : 
    3980                 :             : inline const_tree
    3981                 :    86875050 : tree_not_check4 (const_tree __t, const char *__f, int __l, const char *__g,
    3982                 :             :                  enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    3983                 :             :                  enum tree_code __c4)
    3984                 :             : {
    3985                 :    86875050 :   if (TREE_CODE (__t) == __c1
    3986                 :    86875050 :       || TREE_CODE (__t) == __c2
    3987                 :    86875050 :       || TREE_CODE (__t) == __c3
    3988                 :    86875050 :       || TREE_CODE (__t) == __c4)
    3989                 :           0 :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, 0);
    3990                 :    86875050 :   return __t;
    3991                 :             : }
    3992                 :             : 
    3993                 :             : inline const_tree
    3994                 :             : tree_check5 (const_tree __t, const char *__f, int __l, const char *__g,
    3995                 :             :              enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    3996                 :             :              enum tree_code __c4, enum tree_code __c5)
    3997                 :             : {
    3998                 :             :   if (TREE_CODE (__t) != __c1
    3999                 :             :       && TREE_CODE (__t) != __c2
    4000                 :             :       && TREE_CODE (__t) != __c3
    4001                 :             :       && TREE_CODE (__t) != __c4
    4002                 :             :       && TREE_CODE (__t) != __c5)
    4003                 :             :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, 0);
    4004                 :             :   return __t;
    4005                 :             : }
    4006                 :             : 
    4007                 :             : inline const_tree
    4008                 :             : tree_not_check5 (const_tree __t, const char *__f, int __l, const char *__g,
    4009                 :             :                  enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    4010                 :             :                  enum tree_code __c4, enum tree_code __c5)
    4011                 :             : {
    4012                 :             :   if (TREE_CODE (__t) == __c1
    4013                 :             :       || TREE_CODE (__t) == __c2
    4014                 :             :       || TREE_CODE (__t) == __c3
    4015                 :             :       || TREE_CODE (__t) == __c4
    4016                 :             :       || TREE_CODE (__t) == __c5)
    4017                 :             :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, 0);
    4018                 :             :   return __t;
    4019                 :             : }
    4020                 :             : 
    4021                 :             : inline const_tree
    4022                 :   452619998 : tree_check6 (const_tree __t, const char *__f, int __l, const char *__g,
    4023                 :             :              enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    4024                 :             :              enum tree_code __c4, enum tree_code __c5, enum tree_code __c6)
    4025                 :             : {
    4026                 :   452619998 :   if (TREE_CODE (__t) != __c1
    4027                 :    41037432 :       && TREE_CODE (__t) != __c2
    4028                 :    29507772 :       && TREE_CODE (__t) != __c3
    4029                 :     1748344 :       && TREE_CODE (__t) != __c4
    4030                 :       48742 :       && TREE_CODE (__t) != __c5
    4031                 :       48742 :       && TREE_CODE (__t) != __c6)
    4032                 :           0 :     tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, __c6,
    4033                 :             :                        0);
    4034                 :   452619998 :   return __t;
    4035                 :             : }
    4036                 :             : 
    4037                 :             : inline const_tree
    4038                 :             : tree_not_check6 (const_tree __t, const char *__f, int __l, const char *__g,
    4039                 :             :                  enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
    4040                 :             :                  enum tree_code __c4, enum tree_code __c5, enum tree_code __c6)
    4041                 :             : {
    4042                 :             :   if (TREE_CODE (__t) == __c1
    4043                 :             :       || TREE_CODE (__t) == __c2
    4044                 :             :       || TREE_CODE (__t) == __c3
    4045                 :             :       || TREE_CODE (__t) == __c4
    4046                 :             :       || TREE_CODE (__t) == __c5
    4047                 :             :       || TREE_CODE (__t) == __c6)
    4048                 :             :     tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5,
    4049                 :             :                            __c6, 0);
    4050                 :             :   return __t;
    4051                 :             : }
    4052                 :             : 
    4053                 :             : inline const_tree
    4054                 : >22179*10^7 : contains_struct_check (const_tree __t, const enum tree_node_structure_enum __s,
    4055                 :             :                        const char *__f, int __l, const char *__g)
    4056                 :             : {
    4057                 : >22179*10^7 :   if (tree_contains_struct[TREE_CODE (__t)][__s] != 1)
    4058                 :           0 :       tree_contains_struct_check_failed (__t, __s, __f, __l, __g);
    4059                 : >22179*10^7 :   return __t;
    4060                 :             : }
    4061                 :             : 
    4062                 :             : inline const_tree
    4063                 : >21355*10^7 : tree_class_check (const_tree __t, const enum tree_code_class __class,
    4064                 :             :                   const char *__f, int __l, const char *__g)
    4065                 :             : {
    4066                 : >21355*10^7 :   if (TREE_CODE_CLASS (TREE_CODE (__t)) != __class)
    4067                 :           0 :     tree_class_check_failed (__t, __class, __f, __l, __g);
    4068                 : >21355*10^7 :   return __t;
    4069                 :             : }
    4070                 :             : 
    4071                 :             : inline const_tree
    4072                 :             : tree_range_check (const_tree __t,
    4073                 :             :                   enum tree_code __code1, enum tree_code __code2,
    4074                 :             :                   const char *__f, int __l, const char *__g)
    4075                 :             : {
    4076                 :             :   if (TREE_CODE (__t) < __code1 || TREE_CODE (__t) > __code2)
    4077                 :             :     tree_range_check_failed (__t, __f, __l, __g, __code1, __code2);
    4078                 :             :   return __t;
    4079                 :             : }
    4080                 :             : 
    4081                 :             : inline const_tree
    4082                 :             : omp_clause_subcode_check (const_tree __t, enum omp_clause_code __code,
    4083                 :             :                           const char *__f, int __l, const char *__g)
    4084                 :             : {
    4085                 :             :   if (TREE_CODE (__t) != OMP_CLAUSE)
    4086                 :             :     tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
    4087                 :             :   if (__t->omp_clause.code != __code)
    4088                 :             :     omp_clause_check_failed (__t, __f, __l, __g, __code);
    4089                 :             :   return __t;
    4090                 :             : }
    4091                 :             : 
    4092                 :             : inline const_tree
    4093                 :             : omp_clause_range_check (const_tree __t,
    4094                 :             :                         enum omp_clause_code __code1,
    4095                 :             :                         enum omp_clause_code __code2,
    4096                 :             :                         const char *__f, int __l, const char *__g)
    4097                 :             : {
    4098                 :             :   if (TREE_CODE (__t) != OMP_CLAUSE)
    4099                 :             :     tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
    4100                 :             :   if ((int) __t->omp_clause.code < (int) __code1
    4101                 :             :       || (int) __t->omp_clause.code > (int) __code2)
    4102                 :             :     omp_clause_range_check_failed (__t, __f, __l, __g, __code1, __code2);
    4103                 :             :   return __t;
    4104                 :             : }
    4105                 :             : 
    4106                 :             : inline const_tree
    4107                 : 26393900051 : expr_check (const_tree __t, const char *__f, int __l, const char *__g)
    4108                 :             : {
    4109                 : 26393900051 :   char const __c = TREE_CODE_CLASS (TREE_CODE (__t));
    4110                 : 26393900051 :   if (!IS_EXPR_CODE_CLASS (__c))
    4111                 :           0 :     tree_class_check_failed (__t, tcc_expression, __f, __l, __g);
    4112                 : 26393900051 :   return __t;
    4113                 :             : }
    4114                 :             : 
    4115                 :             : inline const_tree
    4116                 :  9164816275 : non_type_check (const_tree __t, const char *__f, int __l, const char *__g)
    4117                 :             : {
    4118                 :  9164816275 :   if (TYPE_P (__t))
    4119                 :           0 :     tree_not_class_check_failed (__t, tcc_type, __f, __l, __g);
    4120                 :  9164816275 :   return __t;
    4121                 :             : }
    4122                 :             : 
    4123                 :             : # if GCC_VERSION >= 4006
    4124                 :             : #pragma GCC diagnostic push
    4125                 :             : #pragma GCC diagnostic ignored "-Wstrict-overflow"
    4126                 :             : #endif
    4127                 :             : 
    4128                 :             : inline const_tree *
    4129                 :  4015452800 : tree_vec_elt_check (const_tree __t, int __i,
    4130                 :             :                     const char *__f, int __l, const char *__g)
    4131                 :             : {
    4132                 :  4015452800 :   if (TREE_CODE (__t) != TREE_VEC)
    4133                 :           0 :     tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
    4134                 :  4015452800 :   if (__i < 0 || __i >= __t->base.u.length)
    4135                 :           0 :     tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
    4136                 :  4015452800 :   return CONST_CAST (const_tree *, &__t->vec.a[__i]);
    4137                 :             :   //return &__t->vec.a[__i];
    4138                 :             : }
    4139                 :             : 
    4140                 :             : # if GCC_VERSION >= 4006
    4141                 :             : #pragma GCC diagnostic pop
    4142                 :             : #endif
    4143                 :             : 
    4144                 :             : inline const_tree *
    4145                 :             : omp_clause_elt_check (const_tree __t, int __i,
    4146                 :             :                       const char *__f, int __l, const char *__g)
    4147                 :             : {
    4148                 :             :   if (TREE_CODE (__t) != OMP_CLAUSE)
    4149                 :             :     tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
    4150                 :             :   if (__i < 0 || __i >= omp_clause_num_ops [__t->omp_clause.code])
    4151                 :             :     omp_clause_operand_check_failed (__i, __t, __f, __l, __g);
    4152                 :             :   return CONST_CAST (const_tree *, &__t->omp_clause.ops[__i]);
    4153                 :             : }
    4154                 :             : 
    4155                 :             : inline const_tree
    4156                 :     3125559 : any_integral_type_check (const_tree __t, const char *__f, int __l,
    4157                 :             :                          const char *__g)
    4158                 :             : {
    4159                 :     3125559 :   if (!ANY_INTEGRAL_TYPE_P (__t))
    4160                 :           0 :     tree_check_failed (__t, __f, __l, __g, BOOLEAN_TYPE, ENUMERAL_TYPE,
    4161                 :             :                        INTEGER_TYPE, BITINT_TYPE, 0);
    4162                 :     3125559 :   return __t;
    4163                 :             : }
    4164                 :             : 
    4165                 :             : #endif
    4166                 :             : 
    4167                 :             : /* Compute the number of operands in an expression node NODE.  For
    4168                 :             :    tcc_vl_exp nodes like CALL_EXPRs, this is stored in the node itself,
    4169                 :             :    otherwise it is looked up from the node's code.  */
    4170                 :             : inline int
    4171                 : >19472*10^7 : tree_operand_length (const_tree node)
    4172                 :             : {
    4173                 : >19472*10^7 :   if (VL_EXP_CLASS_P (node))
    4174                 : 10615491947 :     return VL_EXP_OPERAND_LENGTH (node);
    4175                 :             :   else
    4176                 : >18410*10^7 :     return TREE_CODE_LENGTH (TREE_CODE (node));
    4177                 :             : }
    4178                 :             : 
    4179                 :             : #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
    4180                 :             : 
    4181                 :             : /* Special checks for TREE_OPERANDs.  */
    4182                 :             : inline tree *
    4183                 : >14149*10^7 : tree_operand_check (tree __t, int __i,
    4184                 :             :                     const char *__f, int __l, const char *__g)
    4185                 :             : {
    4186                 : >14149*10^7 :   const_tree __u = EXPR_CHECK (__t);
    4187                 : >14149*10^7 :   if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__u))
    4188                 :           0 :     tree_operand_check_failed (__i, __u, __f, __l, __g);
    4189                 : >14149*10^7 :   return &CONST_CAST_TREE (__u)->exp.operands[__i];
    4190                 :             : }
    4191                 :             : 
    4192                 :             : inline tree *
    4193                 :   143907898 : tree_operand_check_code (tree __t, enum tree_code __code, int __i,
    4194                 :             :                          const char *__f, int __l, const char *__g)
    4195                 :             : {
    4196                 :   143907898 :   if (TREE_CODE (__t) != __code)
    4197                 :           0 :     tree_check_failed (__t, __f, __l, __g, __code, 0);
    4198                 :   143907898 :   if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t))
    4199                 :           0 :     tree_operand_check_failed (__i, __t, __f, __l, __g);
    4200                 :   143907898 :   return &__t->exp.operands[__i];
    4201                 :             : }
    4202                 :             : 
    4203                 :             : inline const_tree *
    4204                 : 26393900044 : tree_operand_check (const_tree __t, int __i,
    4205                 :             :                     const char *__f, int __l, const char *__g)
    4206                 :             : {
    4207                 : 26393900044 :   const_tree __u = EXPR_CHECK (__t);
    4208                 : 26393900044 :   if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__u))
    4209                 :           0 :     tree_operand_check_failed (__i, __u, __f, __l, __g);
    4210                 : 26393900044 :   return CONST_CAST (const_tree *, &__u->exp.operands[__i]);
    4211                 :             : }
    4212                 :             : 
    4213                 :             : inline const_tree *
    4214                 :          80 : tree_operand_check_code (const_tree __t, enum tree_code __code, int __i,
    4215                 :             :                          const char *__f, int __l, const char *__g)
    4216                 :             : {
    4217                 :          80 :   if (TREE_CODE (__t) != __code)
    4218                 :           0 :     tree_check_failed (__t, __f, __l, __g, __code, 0);
    4219                 :          80 :   if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t))
    4220                 :           0 :     tree_operand_check_failed (__i, __t, __f, __l, __g);
    4221                 :          80 :   return CONST_CAST (const_tree *, &__t->exp.operands[__i]);
    4222                 :             : }
    4223                 :             : 
    4224                 :             : #endif
    4225                 :             : 
    4226                 :             : /* True iff an identifier matches a C string.  */
    4227                 :             : 
    4228                 :             : inline bool
    4229                 :  2846483540 : id_equal (const_tree id, const char *str)
    4230                 :             : {
    4231                 :  2846483540 :   return !strcmp (IDENTIFIER_POINTER (id), str);
    4232                 :             : }
    4233                 :             : 
    4234                 :             : inline bool
    4235                 :         106 : id_equal (const char *str, const_tree id)
    4236                 :             : {
    4237                 :         106 :   return id_equal (id, str);
    4238                 :             : }
    4239                 :             : 
    4240                 :             : /* Return the number of elements in the VECTOR_TYPE given by NODE.  */
    4241                 :             : 
    4242                 :             : inline poly_uint64
    4243                 :   626035477 : TYPE_VECTOR_SUBPARTS (const_tree node)
    4244                 :             : {
    4245                 :   626035477 :   STATIC_ASSERT (NUM_POLY_INT_COEFFS <= 2);
    4246                 :   626035477 :   unsigned int precision = VECTOR_TYPE_CHECK (node)->type_common.precision;
    4247                 :   626035477 :   if (NUM_POLY_INT_COEFFS == 2)
    4248                 :             :     {
    4249                 :             :       /* See the corresponding code in SET_TYPE_VECTOR_SUBPARTS for a
    4250                 :             :          description of the encoding.  */
    4251                 :             :       poly_uint64 res = 0;
    4252                 :             :       res.coeffs[0] = HOST_WIDE_INT_1U << (precision & 0xff);
    4253                 :             :       if (precision & 0x100)
    4254                 :             :         res.coeffs[1] = HOST_WIDE_INT_1U << (precision & 0xff);
    4255                 :             :       return res;
    4256                 :             :     }
    4257                 :             :   else
    4258                 :   626035477 :     return HOST_WIDE_INT_1U << precision;
    4259                 :             : }
    4260                 :             : 
    4261                 :             : /* Set the number of elements in VECTOR_TYPE NODE to SUBPARTS, which must
    4262                 :             :    satisfy valid_vector_subparts_p.  */
    4263                 :             : 
    4264                 :             : inline void
    4265                 :    91594291 : SET_TYPE_VECTOR_SUBPARTS (tree node, poly_uint64 subparts)
    4266                 :             : {
    4267                 :    91594291 :   STATIC_ASSERT (NUM_POLY_INT_COEFFS <= 2);
    4268                 :    91594291 :   unsigned HOST_WIDE_INT coeff0 = subparts.coeffs[0];
    4269                 :    91594291 :   int index = exact_log2 (coeff0);
    4270                 :           0 :   gcc_assert (index >= 0);
    4271                 :    91594291 :   if (NUM_POLY_INT_COEFFS == 2)
    4272                 :             :     {
    4273                 :             :       /* We have two coefficients that are each in the range 1 << [0, 63],
    4274                 :             :          so supporting all combinations would require 6 bits per coefficient
    4275                 :             :          and 12 bits in total.  Since the precision field is only 10 bits
    4276                 :             :          in size, we need to be more restrictive than that.
    4277                 :             : 
    4278                 :             :          At present, coeff[1] is always either 0 (meaning that the number
    4279                 :             :          of units is constant) or equal to coeff[0] (meaning that the number
    4280                 :             :          of units is N + X * N for some target-dependent zero-based runtime
    4281                 :             :          parameter X).  We can therefore encode coeff[1] in a single bit.
    4282                 :             : 
    4283                 :             :          The most compact encoding would be to use mask 0x3f for coeff[0]
    4284                 :             :          and 0x40 for coeff[1], leaving 0x380 unused.  It's possible to
    4285                 :             :          get slightly more efficient code on some hosts if we instead
    4286                 :             :          treat the shift amount as an independent byte, so here we use
    4287                 :             :          0xff for coeff[0] and 0x100 for coeff[1].  */
    4288                 :             :       unsigned HOST_WIDE_INT coeff1 = subparts.coeffs[1];
    4289                 :             :       gcc_assert (coeff1 == 0 || coeff1 == coeff0);
    4290                 :             :       VECTOR_TYPE_CHECK (node)->type_common.precision
    4291                 :             :         = index + (coeff1 != 0 ? 0x100 : 0);
    4292                 :             :     }
    4293                 :             :   else
    4294                 :    91594291 :     VECTOR_TYPE_CHECK (node)->type_common.precision = index;
    4295                 :    91594291 : }
    4296                 :             : 
    4297                 :             : /* Return true if we can construct vector types with the given number
    4298                 :             :    of subparts.  */
    4299                 :             : 
    4300                 :             : inline bool
    4301                 :       21419 : valid_vector_subparts_p (poly_uint64 subparts)
    4302                 :             : {
    4303                 :       21419 :   unsigned HOST_WIDE_INT coeff0 = subparts.coeffs[0];
    4304                 :       21729 :   if (!pow2p_hwi (coeff0))
    4305                 :           0 :     return false;
    4306                 :             :   if (NUM_POLY_INT_COEFFS == 2)
    4307                 :             :     {
    4308                 :             :       unsigned HOST_WIDE_INT coeff1 = subparts.coeffs[1];
    4309                 :             :       if (coeff1 != 0 && coeff1 != coeff0)
    4310                 :             :         return false;
    4311                 :             :     }
    4312                 :             :   return true;
    4313                 :             : }
    4314                 :             : 
    4315                 :             : /* Return the built-in function that DECL represents, given that it is known
    4316                 :             :    to be a FUNCTION_DECL with built-in class BUILT_IN_NORMAL.  */
    4317                 :             : inline built_in_function
    4318                 :  2231931009 : DECL_FUNCTION_CODE (const_tree decl)
    4319                 :             : {
    4320                 :  2231931009 :   const tree_function_decl &fndecl = FUNCTION_DECL_CHECK (decl)->function_decl;
    4321                 :  2231931009 :   gcc_checking_assert (fndecl.built_in_class == BUILT_IN_NORMAL);
    4322                 :  2231931009 :   return (built_in_function) fndecl.function_code;
    4323                 :             : }
    4324                 :             : 
    4325                 :             : /* Return the target-specific built-in function that DECL represents,
    4326                 :             :    given that it is known to be a FUNCTION_DECL with built-in class
    4327                 :             :    BUILT_IN_MD.  */
    4328                 :             : inline int
    4329                 :    59974591 : DECL_MD_FUNCTION_CODE (const_tree decl)
    4330                 :             : {
    4331                 :    59974591 :   const tree_function_decl &fndecl = FUNCTION_DECL_CHECK (decl)->function_decl;
    4332                 :    59974591 :   gcc_checking_assert (fndecl.built_in_class == BUILT_IN_MD);
    4333                 :    59974591 :   return fndecl.function_code;
    4334                 :             : }
    4335                 :             : 
    4336                 :             : /* Return the frontend-specific built-in function that DECL represents,
    4337                 :             :    given that it is known to be a FUNCTION_DECL with built-in class
    4338                 :             :    BUILT_IN_FRONTEND.  */
    4339                 :             : inline int
    4340                 :      184863 : DECL_FE_FUNCTION_CODE (const_tree decl)
    4341                 :             : {
    4342                 :      184863 :   const tree_function_decl &fndecl = FUNCTION_DECL_CHECK (decl)->function_decl;
    4343                 :      184863 :   gcc_checking_assert (fndecl.built_in_class == BUILT_IN_FRONTEND);
    4344                 :      184863 :   return fndecl.function_code;
    4345                 :             : }
    4346                 :             : 
    4347                 :             : /* Record that FUNCTION_DECL DECL represents built-in function FCODE of
    4348                 :             :    class FCLASS.  */
    4349                 :             : inline void
    4350                 :   742627592 : set_decl_built_in_function (tree decl, built_in_class fclass,
    4351                 :             :                             unsigned int fcode)
    4352                 :             : {
    4353                 :   742627592 :   tree_function_decl &fndecl = FUNCTION_DECL_CHECK (decl)->function_decl;
    4354                 :   742627592 :   fndecl.built_in_class = fclass;
    4355                 :   742627592 :   fndecl.function_code = fcode;
    4356                 :   742627592 : }
    4357                 :             : 
    4358                 :             : /* Record that FUNCTION_DECL NEWDECL represents the same built-in function
    4359                 :             :    as OLDDECL (or none, if OLDDECL doesn't represent a built-in function).  */
    4360                 :             : inline void
    4361                 :     6801865 : copy_decl_built_in_function (tree newdecl, const_tree olddecl)
    4362                 :             : {
    4363                 :     6801865 :   tree_function_decl &newfndecl = FUNCTION_DECL_CHECK (newdecl)->function_decl;
    4364                 :     6801865 :   const tree_function_decl &oldfndecl
    4365                 :     6801865 :     = FUNCTION_DECL_CHECK (olddecl)->function_decl;
    4366                 :     6801865 :   newfndecl.built_in_class = oldfndecl.built_in_class;
    4367                 :     6801865 :   newfndecl.function_code = oldfndecl.function_code;
    4368                 :     6801865 : }
    4369                 :             : 
    4370                 :             : /* In NON_LVALUE_EXPR and VIEW_CONVERT_EXPR, set when this node is merely a
    4371                 :             :    wrapper added to express a location_t on behalf of the node's child
    4372                 :             :    (e.g. by maybe_wrap_with_location).  */
    4373                 :             : 
    4374                 :             : #define EXPR_LOCATION_WRAPPER_P(NODE) \
    4375                 :             :   (TREE_CHECK2(NODE, NON_LVALUE_EXPR, VIEW_CONVERT_EXPR)->base.public_flag)
    4376                 :             : 
    4377                 :             : /* Test if EXP is merely a wrapper node, added to express a location_t
    4378                 :             :    on behalf of the node's child (e.g. by maybe_wrap_with_location).  */
    4379                 :             : 
    4380                 :             : inline bool
    4381                 : 63677212109 : location_wrapper_p (const_tree exp)
    4382                 :             : {
    4383                 :             :   /* A wrapper node has code NON_LVALUE_EXPR or VIEW_CONVERT_EXPR, and
    4384                 :             :      the flag EXPR_LOCATION_WRAPPER_P is set.
    4385                 :             :      It normally has the same type as its operand, but it can have a
    4386                 :             :      different one if the type of the operand has changed (e.g. when
    4387                 :             :      merging duplicate decls).
    4388                 :             : 
    4389                 :             :      NON_LVALUE_EXPR is used for wrapping constants, apart from STRING_CST.
    4390                 :             :      VIEW_CONVERT_EXPR is used for wrapping non-constants and STRING_CST.  */
    4391                 : 63677212109 :   if ((TREE_CODE (exp) == NON_LVALUE_EXPR
    4392                 : 62932392423 :        || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
    4393                 : 66641410224 :       && EXPR_LOCATION_WRAPPER_P (exp))
    4394                 :  3537695445 :     return true;
    4395                 :             :   return false;
    4396                 :             : }
    4397                 :             : 
    4398                 :             : /* Implementation of STRIP_ANY_LOCATION_WRAPPER.  */
    4399                 :             : 
    4400                 :             : inline tree
    4401                 : 40272501859 : tree_strip_any_location_wrapper (tree exp)
    4402                 :             : {
    4403                 : 40272501859 :   if (location_wrapper_p (exp))
    4404                 :  1982011050 :     return TREE_OPERAND (exp, 0);
    4405                 :             :   else
    4406                 :             :     return exp;
    4407                 :             : }
    4408                 :             : 
    4409                 :             : #define error_mark_node                 global_trees[TI_ERROR_MARK]
    4410                 :             : 
    4411                 :             : #define intQI_type_node                 global_trees[TI_INTQI_TYPE]
    4412                 :             : #define intHI_type_node                 global_trees[TI_INTHI_TYPE]
    4413                 :             : #define intSI_type_node                 global_trees[TI_INTSI_TYPE]
    4414                 :             : #define intDI_type_node                 global_trees[TI_INTDI_TYPE]
    4415                 :             : #define intTI_type_node                 global_trees[TI_INTTI_TYPE]
    4416                 :             : 
    4417                 :             : #define unsigned_intQI_type_node        global_trees[TI_UINTQI_TYPE]
    4418                 :             : #define unsigned_intHI_type_node        global_trees[TI_UINTHI_TYPE]
    4419                 :             : #define unsigned_intSI_type_node        global_trees[TI_UINTSI_TYPE]
    4420                 :             : #define unsigned_intDI_type_node        global_trees[TI_UINTDI_TYPE]
    4421                 :             : #define unsigned_intTI_type_node        global_trees[TI_UINTTI_TYPE]
    4422                 :             : 
    4423                 :             : #define atomicQI_type_node      global_trees[TI_ATOMICQI_TYPE]
    4424                 :             : #define atomicHI_type_node      global_trees[TI_ATOMICHI_TYPE]
    4425                 :             : #define atomicSI_type_node      global_trees[TI_ATOMICSI_TYPE]
    4426                 :             : #define atomicDI_type_node      global_trees[TI_ATOMICDI_TYPE]
    4427                 :             : #define atomicTI_type_node      global_trees[TI_ATOMICTI_TYPE]
    4428                 :             : 
    4429                 :             : #define uint16_type_node                global_trees[TI_UINT16_TYPE]
    4430                 :             : #define uint32_type_node                global_trees[TI_UINT32_TYPE]
    4431                 :             : #define uint64_type_node                global_trees[TI_UINT64_TYPE]
    4432                 :             : #define uint128_type_node               global_trees[TI_UINT128_TYPE]
    4433                 :             : 
    4434                 :             : #define void_node                       global_trees[TI_VOID]
    4435                 :             : 
    4436                 :             : #define integer_zero_node               global_trees[TI_INTEGER_ZERO]
    4437                 :             : #define integer_one_node                global_trees[TI_INTEGER_ONE]
    4438                 :             : #define integer_three_node              global_trees[TI_INTEGER_THREE]
    4439                 :             : #define integer_minus_one_node          global_trees[TI_INTEGER_MINUS_ONE]
    4440                 :             : #define size_zero_node                  global_trees[TI_SIZE_ZERO]
    4441                 :             : #define size_one_node                   global_trees[TI_SIZE_ONE]
    4442                 :             : #define bitsize_zero_node               global_trees[TI_BITSIZE_ZERO]
    4443                 :             : #define bitsize_one_node                global_trees[TI_BITSIZE_ONE]
    4444                 :             : #define bitsize_unit_node               global_trees[TI_BITSIZE_UNIT]
    4445                 :             : 
    4446                 :             : /* Base access nodes.  */
    4447                 :             : #define access_public_node              global_trees[TI_PUBLIC]
    4448                 :             : #define access_protected_node           global_trees[TI_PROTECTED]
    4449                 :             : #define access_private_node             global_trees[TI_PRIVATE]
    4450                 :             : 
    4451                 :             : #define null_pointer_node               global_trees[TI_NULL_POINTER]
    4452                 :             : 
    4453                 :             : #define float_type_node                 global_trees[TI_FLOAT_TYPE]
    4454                 :             : #define double_type_node                global_trees[TI_DOUBLE_TYPE]
    4455                 :             : #define long_double_type_node           global_trees[TI_LONG_DOUBLE_TYPE]
    4456                 :             : #define bfloat16_type_node              global_trees[TI_BFLOAT16_TYPE]
    4457                 :             : 
    4458                 :             : /* Nodes for particular _FloatN and _FloatNx types in sequence.  */
    4459                 :             : #define FLOATN_TYPE_NODE(IDX)           global_trees[TI_FLOATN_TYPE_FIRST + (IDX)]
    4460                 :             : #define FLOATN_NX_TYPE_NODE(IDX)        global_trees[TI_FLOATN_NX_TYPE_FIRST + (IDX)]
    4461                 :             : #define FLOATNX_TYPE_NODE(IDX)          global_trees[TI_FLOATNX_TYPE_FIRST + (IDX)]
    4462                 :             : 
    4463                 :             : /* Names for individual types (code should normally iterate over all
    4464                 :             :    such types; these are only for back-end use, or in contexts such as
    4465                 :             :    *.def where iteration is not possible).  */
    4466                 :             : #define float16_type_node               global_trees[TI_FLOAT16_TYPE]
    4467                 :             : #define float32_type_node               global_trees[TI_FLOAT32_TYPE]
    4468                 :             : #define float64_type_node               global_trees[TI_FLOAT64_TYPE]
    4469                 :             : #define float128_type_node              global_trees[TI_FLOAT128_TYPE]
    4470                 :             : #define float32x_type_node              global_trees[TI_FLOAT32X_TYPE]
    4471                 :             : #define float64x_type_node              global_trees[TI_FLOAT64X_TYPE]
    4472                 :             : #define float128x_type_node             global_trees[TI_FLOAT128X_TYPE]
    4473                 :             : 
    4474                 :             : /* Type used by certain backends for __float128, which in C++ should be
    4475                 :             :    distinct type from _Float128 for backwards compatibility reasons.  */
    4476                 :             : #define float128t_type_node             global_trees[TI_FLOAT128T_TYPE]
    4477                 :             : 
    4478                 :             : #define float_ptr_type_node             global_trees[TI_FLOAT_PTR_TYPE]
    4479                 :             : #define double_ptr_type_node            global_trees[TI_DOUBLE_PTR_TYPE]
    4480                 :             : #define long_double_ptr_type_node       global_trees[TI_LONG_DOUBLE_PTR_TYPE]
    4481                 :             : #define integer_ptr_type_node           global_trees[TI_INTEGER_PTR_TYPE]
    4482                 :             : 
    4483                 :             : #define complex_integer_type_node       global_trees[TI_COMPLEX_INTEGER_TYPE]
    4484                 :             : #define complex_float_type_node         global_trees[TI_COMPLEX_FLOAT_TYPE]
    4485                 :             : #define complex_double_type_node        global_trees[TI_COMPLEX_DOUBLE_TYPE]
    4486                 :             : #define complex_long_double_type_node   global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]
    4487                 :             : 
    4488                 :             : #define COMPLEX_FLOATN_NX_TYPE_NODE(IDX)        global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (IDX)]
    4489                 :             : 
    4490                 :             : #define void_type_node                  global_trees[TI_VOID_TYPE]
    4491                 :             : /* The C type `void *'.  */
    4492                 :             : #define ptr_type_node                   global_trees[TI_PTR_TYPE]
    4493                 :             : /* The C type `const void *'.  */
    4494                 :             : #define const_ptr_type_node             global_trees[TI_CONST_PTR_TYPE]
    4495                 :             : /* The C type `size_t'.  */
    4496                 :             : #define size_type_node                  global_trees[TI_SIZE_TYPE]
    4497                 :             : #define pid_type_node                   global_trees[TI_PID_TYPE]
    4498                 :             : #define ptrdiff_type_node               global_trees[TI_PTRDIFF_TYPE]
    4499                 :             : #define va_list_type_node               global_trees[TI_VA_LIST_TYPE]
    4500                 :             : #define va_list_gpr_counter_field       global_trees[TI_VA_LIST_GPR_COUNTER_FIELD]
    4501                 :             : #define va_list_fpr_counter_field       global_trees[TI_VA_LIST_FPR_COUNTER_FIELD]
    4502                 :             : /* The C type `FILE *'.  */
    4503                 :             : #define fileptr_type_node               global_trees[TI_FILEPTR_TYPE]
    4504                 :             : /* The C type `const struct tm *'.  */
    4505                 :             : #define const_tm_ptr_type_node          global_trees[TI_CONST_TM_PTR_TYPE]
    4506                 :             : /* The C type `fenv_t *'.  */
    4507                 :             : #define fenv_t_ptr_type_node            global_trees[TI_FENV_T_PTR_TYPE]
    4508                 :             : #define const_fenv_t_ptr_type_node      global_trees[TI_CONST_FENV_T_PTR_TYPE]
    4509                 :             : /* The C type `fexcept_t *'.  */
    4510                 :             : #define fexcept_t_ptr_type_node         global_trees[TI_FEXCEPT_T_PTR_TYPE]
    4511                 :             : #define const_fexcept_t_ptr_type_node   global_trees[TI_CONST_FEXCEPT_T_PTR_TYPE]
    4512                 :             : #define pointer_sized_int_node          global_trees[TI_POINTER_SIZED_TYPE]
    4513                 :             : 
    4514                 :             : #define boolean_type_node               global_trees[TI_BOOLEAN_TYPE]
    4515                 :             : #define boolean_false_node              global_trees[TI_BOOLEAN_FALSE]
    4516                 :             : #define boolean_true_node               global_trees[TI_BOOLEAN_TRUE]
    4517                 :             : 
    4518                 :             : /* The decimal floating point types. */
    4519                 :             : #define dfloat32_type_node              global_trees[TI_DFLOAT32_TYPE]
    4520                 :             : #define dfloat64_type_node              global_trees[TI_DFLOAT64_TYPE]
    4521                 :             : #define dfloat128_type_node             global_trees[TI_DFLOAT128_TYPE]
    4522                 :             : 
    4523                 :             : /* The fixed-point types.  */
    4524                 :             : #define sat_short_fract_type_node       global_trees[TI_SAT_SFRACT_TYPE]
    4525                 :             : #define sat_fract_type_node             global_trees[TI_SAT_FRACT_TYPE]
    4526                 :             : #define sat_long_fract_type_node        global_trees[TI_SAT_LFRACT_TYPE]
    4527                 :             : #define sat_long_long_fract_type_node   global_trees[TI_SAT_LLFRACT_TYPE]
    4528                 :             : #define sat_unsigned_short_fract_type_node \
    4529                 :             :                                         global_trees[TI_SAT_USFRACT_TYPE]
    4530                 :             : #define sat_unsigned_fract_type_node    global_trees[TI_SAT_UFRACT_TYPE]
    4531                 :             : #define sat_unsigned_long_fract_type_node \
    4532                 :             :                                         global_trees[TI_SAT_ULFRACT_TYPE]
    4533                 :             : #define sat_unsigned_long_long_fract_type_node \
    4534                 :             :                                         global_trees[TI_SAT_ULLFRACT_TYPE]
    4535                 :             : #define short_fract_type_node           global_trees[TI_SFRACT_TYPE]
    4536                 :             : #define fract_type_node                 global_trees[TI_FRACT_TYPE]
    4537                 :             : #define long_fract_type_node            global_trees[TI_LFRACT_TYPE]
    4538                 :             : #define long_long_fract_type_node       global_trees[TI_LLFRACT_TYPE]
    4539                 :             : #define unsigned_short_fract_type_node  global_trees[TI_USFRACT_TYPE]
    4540                 :             : #define unsigned_fract_type_node        global_trees[TI_UFRACT_TYPE]
    4541                 :             : #define unsigned_long_fract_type_node   global_trees[TI_ULFRACT_TYPE]
    4542                 :             : #define unsigned_long_long_fract_type_node \
    4543                 :             :                                         global_trees[TI_ULLFRACT_TYPE]
    4544                 :             : #define sat_short_accum_type_node       global_trees[TI_SAT_SACCUM_TYPE]
    4545                 :             : #define sat_accum_type_node             global_trees[TI_SAT_ACCUM_TYPE]
    4546                 :             : #define sat_long_accum_type_node        global_trees[TI_SAT_LACCUM_TYPE]
    4547                 :             : #define sat_long_long_accum_type_node   global_trees[TI_SAT_LLACCUM_TYPE]
    4548                 :             : #define sat_unsigned_short_accum_type_node \
    4549                 :             :                                         global_trees[TI_SAT_USACCUM_TYPE]
    4550                 :             : #define sat_unsigned_accum_type_node    global_trees[TI_SAT_UACCUM_TYPE]
    4551                 :             : #define sat_unsigned_long_accum_type_node \
    4552                 :             :                                         global_trees[TI_SAT_ULACCUM_TYPE]
    4553                 :             : #define sat_unsigned_long_long_accum_type_node \
    4554                 :             :                                         global_trees[TI_SAT_ULLACCUM_TYPE]
    4555                 :             : #define short_accum_type_node           global_trees[TI_SACCUM_TYPE]
    4556                 :             : #define accum_type_node                 global_trees[TI_ACCUM_TYPE]
    4557                 :             : #define long_accum_type_node            global_trees[TI_LACCUM_TYPE]
    4558                 :             : #define long_long_accum_type_node       global_trees[TI_LLACCUM_TYPE]
    4559                 :             : #define unsigned_short_accum_type_node  global_trees[TI_USACCUM_TYPE]
    4560                 :             : #define unsigned_accum_type_node        global_trees[TI_UACCUM_TYPE]
    4561                 :             : #define unsigned_long_accum_type_node   global_trees[TI_ULACCUM_TYPE]
    4562                 :             : #define unsigned_long_long_accum_type_node \
    4563                 :             :                                         global_trees[TI_ULLACCUM_TYPE]
    4564                 :             : #define qq_type_node                    global_trees[TI_QQ_TYPE]
    4565                 :             : #define hq_type_node                    global_trees[TI_HQ_TYPE]
    4566                 :             : #define sq_type_node                    global_trees[TI_SQ_TYPE]
    4567                 :             : #define dq_type_node                    global_trees[TI_DQ_TYPE]
    4568                 :             : #define tq_type_node                    global_trees[TI_TQ_TYPE]
    4569                 :             : #define uqq_type_node                   global_trees[TI_UQQ_TYPE]
    4570                 :             : #define uhq_type_node                   global_trees[TI_UHQ_TYPE]
    4571                 :             : #define usq_type_node                   global_trees[TI_USQ_TYPE]
    4572                 :             : #define udq_type_node                   global_trees[TI_UDQ_TYPE]
    4573                 :             : #define utq_type_node                   global_trees[TI_UTQ_TYPE]
    4574                 :             : #define sat_qq_type_node                global_trees[TI_SAT_QQ_TYPE]
    4575                 :             : #define sat_hq_type_node                global_trees[TI_SAT_HQ_TYPE]
    4576                 :             : #define sat_sq_type_node                global_trees[TI_SAT_SQ_TYPE]
    4577                 :             : #define sat_dq_type_node                global_trees[TI_SAT_DQ_TYPE]
    4578                 :             : #define sat_tq_type_node                global_trees[TI_SAT_TQ_TYPE]
    4579                 :             : #define sat_uqq_type_node               global_trees[TI_SAT_UQQ_TYPE]
    4580                 :             : #define sat_uhq_type_node               global_trees[TI_SAT_UHQ_TYPE]
    4581                 :             : #define sat_usq_type_node               global_trees[TI_SAT_USQ_TYPE]
    4582                 :             : #define sat_udq_type_node               global_trees[TI_SAT_UDQ_TYPE]
    4583                 :             : #define sat_utq_type_node               global_trees[TI_SAT_UTQ_TYPE]
    4584                 :             : #define ha_type_node                    global_trees[TI_HA_TYPE]
    4585                 :             : #define sa_type_node                    global_trees[TI_SA_TYPE]
    4586                 :             : #define da_type_node                    global_trees[TI_DA_TYPE]
    4587                 :             : #define ta_type_node                    global_trees[TI_TA_TYPE]
    4588                 :             : #define uha_type_node                   global_trees[TI_UHA_TYPE]
    4589                 :             : #define usa_type_node                   global_trees[TI_USA_TYPE]
    4590                 :             : #define uda_type_node                   global_trees[TI_UDA_TYPE]
    4591                 :             : #define uta_type_node                   global_trees[TI_UTA_TYPE]
    4592                 :             : #define sat_ha_type_node                global_trees[TI_SAT_HA_TYPE]
    4593                 :             : #define sat_sa_type_node                global_trees[TI_SAT_SA_TYPE]
    4594                 :             : #define sat_da_type_node                global_trees[TI_SAT_DA_TYPE]
    4595                 :             : #define sat_ta_type_node                global_trees[TI_SAT_TA_TYPE]
    4596                 :             : #define sat_uha_type_node               global_trees[TI_SAT_UHA_TYPE]
    4597                 :             : #define sat_usa_type_node               global_trees[TI_SAT_USA_TYPE]
    4598                 :             : #define sat_uda_type_node               global_trees[TI_SAT_UDA_TYPE]
    4599                 :             : #define sat_uta_type_node               global_trees[TI_SAT_UTA_TYPE]
    4600                 :             : 
    4601                 :             : /* The node that should be placed at the end of a parameter list to
    4602                 :             :    indicate that the function does not take a variable number of
    4603                 :             :    arguments.  The TREE_VALUE will be void_type_node and there will be
    4604                 :             :    no TREE_CHAIN.  Language-independent code should not assume
    4605                 :             :    anything else about this node.  */
    4606                 :             : #define void_list_node                  global_trees[TI_VOID_LIST_NODE]
    4607                 :             : 
    4608                 :             : #define main_identifier_node            global_trees[TI_MAIN_IDENTIFIER]
    4609                 :             : #define MAIN_NAME_P(NODE) \
    4610                 :             :   (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
    4611                 :             : 
    4612                 :             : /* Optimization options (OPTIMIZATION_NODE) to use for default and current
    4613                 :             :    functions.  */
    4614                 :             : #define optimization_default_node       global_trees[TI_OPTIMIZATION_DEFAULT]
    4615                 :             : #define optimization_current_node       global_trees[TI_OPTIMIZATION_CURRENT]
    4616                 :             : 
    4617                 :             : /* Default/current target options (TARGET_OPTION_NODE).  */
    4618                 :             : #define target_option_default_node      global_trees[TI_TARGET_OPTION_DEFAULT]
    4619                 :             : #define target_option_current_node      global_trees[TI_TARGET_OPTION_CURRENT]
    4620                 :             : 
    4621                 :             : /* Default tree list option(), optimize() pragmas to be linked into the
    4622                 :             :    attribute list.  */
    4623                 :             : #define current_target_pragma           global_trees[TI_CURRENT_TARGET_PRAGMA]
    4624                 :             : #define current_optimize_pragma         global_trees[TI_CURRENT_OPTIMIZE_PRAGMA]
    4625                 :             : 
    4626                 :             : /* SCEV analyzer global shared trees.  */
    4627                 :             : #define chrec_not_analyzed_yet          NULL_TREE
    4628                 :             : #define chrec_dont_know                 global_trees[TI_CHREC_DONT_KNOW]
    4629                 :             : #define chrec_known                     global_trees[TI_CHREC_KNOWN]
    4630                 :             : 
    4631                 :             : #define char_type_node                  integer_types[itk_char]
    4632                 :             : #define signed_char_type_node           integer_types[itk_signed_char]
    4633                 :             : #define unsigned_char_type_node         integer_types[itk_unsigned_char]
    4634                 :             : #define short_integer_type_node         integer_types[itk_short]
    4635                 :             : #define short_unsigned_type_node        integer_types[itk_unsigned_short]
    4636                 :             : #define integer_type_node               integer_types[itk_int]
    4637                 :             : #define unsigned_type_node              integer_types[itk_unsigned_int]
    4638                 :             : #define long_integer_type_node          integer_types[itk_long]
    4639                 :             : #define long_unsigned_type_node         integer_types[itk_unsigned_long]
    4640                 :             : #define long_long_integer_type_node     integer_types[itk_long_long]
    4641                 :             : #define long_long_unsigned_type_node    integer_types[itk_unsigned_long_long]
    4642                 :             : 
    4643                 :             : /* True if T is an erroneous expression.  */
    4644                 :             : 
    4645                 :             : inline bool
    4646                 : 19664234815 : error_operand_p (const_tree t)
    4647                 :             : {
    4648                 : 19664234815 :   return (t == error_mark_node
    4649                 : 19664234815 :           || (t && TREE_TYPE (t) == error_mark_node));
    4650                 :             : }
    4651                 :             : 
    4652                 :             : /* Return the number of elements encoded directly in a VECTOR_CST.  */
    4653                 :             : 
    4654                 :             : inline unsigned int
    4655                 :    24656022 : vector_cst_encoded_nelts (const_tree t)
    4656                 :             : {
    4657                 :    24656022 :   return VECTOR_CST_NPATTERNS (t) * VECTOR_CST_NELTS_PER_PATTERN (t);
    4658                 :             : }
    4659                 :             : 
    4660                 :             : extern tree decl_assembler_name (tree);
    4661                 :             : extern void overwrite_decl_assembler_name (tree decl, tree name);
    4662                 :             : extern tree decl_comdat_group (const_tree);
    4663                 :             : extern tree decl_comdat_group_id (const_tree);
    4664                 :             : extern const char *decl_section_name (const_tree);
    4665                 :             : extern void set_decl_section_name (tree, const char *);
    4666                 :             : extern void set_decl_section_name (tree, const_tree);
    4667                 :             : extern enum tls_model decl_tls_model (const_tree);
    4668                 :             : extern void set_decl_tls_model (tree, enum tls_model);
    4669                 :             : 
    4670                 :             : /* Compute the number of bytes occupied by 'node'.  This routine only
    4671                 :             :    looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH.  */
    4672                 :             : 
    4673                 :             : extern size_t tree_size (const_tree);
    4674                 :             : 
    4675                 :             : /* Compute the number of bytes occupied by a tree with code CODE.
    4676                 :             :    This function cannot be used for TREE_VEC or INTEGER_CST nodes,
    4677                 :             :    which are of variable length.  */
    4678                 :             : extern size_t tree_code_size (enum tree_code);
    4679                 :             : 
    4680                 :             : /* Allocate and return a new UID from the DECL_UID namespace.  */
    4681                 :             : extern int allocate_decl_uid (void);
    4682                 :             : 
    4683                 :             : /* Lowest level primitive for allocating a node.
    4684                 :             :    The TREE_CODE is the only argument.  Contents are initialized
    4685                 :             :    to zero except for a few of the common fields.  */
    4686                 :             : 
    4687                 :             : extern tree make_node (enum tree_code CXX_MEM_STAT_INFO);
    4688                 :             : 
    4689                 :             : /* Free tree node.  */
    4690                 :             : 
    4691                 :             : extern void free_node (tree);
    4692                 :             : 
    4693                 :             : /* Make a copy of a node, with all the same contents.  */
    4694                 :             : 
    4695                 :             : extern tree copy_node (tree CXX_MEM_STAT_INFO);
    4696                 :             : 
    4697                 :             : /* Make a copy of a chain of TREE_LIST nodes.  */
    4698                 :             : 
    4699                 :             : extern tree copy_list (tree);
    4700                 :             : 
    4701                 :             : /* Make a CASE_LABEL_EXPR.  */
    4702                 :             : 
    4703                 :             : extern tree build_case_label (tree, tree, tree);
    4704                 :             : 
    4705                 :             : /* Make a BINFO.  */
    4706                 :             : extern tree make_tree_binfo (unsigned CXX_MEM_STAT_INFO);
    4707                 :             : 
    4708                 :             : /* Make an INTEGER_CST.  */
    4709                 :             : 
    4710                 :             : extern tree make_int_cst (int, int CXX_MEM_STAT_INFO);
    4711                 :             : 
    4712                 :             : /* Make a TREE_VEC.  */
    4713                 :             : 
    4714                 :             : extern tree make_tree_vec (int CXX_MEM_STAT_INFO);
    4715                 :             : 
    4716                 :             : /* Grow a TREE_VEC.  */
    4717                 :             : 
    4718                 :             : extern tree grow_tree_vec (tree v, int CXX_MEM_STAT_INFO);
    4719                 :             : 
    4720                 :             : /* Treat a TREE_VEC as a range of trees, e.g.
    4721                 :             :    for (tree e : tree_vec_range (v)) { ... }  */
    4722                 :             : 
    4723                 :             : class tree_vec_range
    4724                 :             : {
    4725                 :             :   tree v;
    4726                 :             : public:
    4727                 : 13539275655 :   tree_vec_range(tree v) : v(v) { }
    4728                 : 13539275655 :   tree *begin() { return TREE_VEC_BEGIN (v); }
    4729                 : 13539275655 :   tree *end() { return TREE_VEC_END (v); }
    4730                 :             : };
    4731                 :             : 
    4732                 :             : /* Construct various types of nodes.  */
    4733                 :             : 
    4734                 :             : extern tree build_nt (enum tree_code, ...);
    4735                 :             : extern tree build_nt_call_vec (tree, vec<tree, va_gc> *);
    4736                 :             : 
    4737                 :             : extern tree build0 (enum tree_code, tree CXX_MEM_STAT_INFO);
    4738                 :             : extern tree build1 (enum tree_code, tree, tree CXX_MEM_STAT_INFO);
    4739                 :             : extern tree build2 (enum tree_code, tree, tree, tree CXX_MEM_STAT_INFO);
    4740                 :             : extern tree build3 (enum tree_code, tree, tree, tree, tree CXX_MEM_STAT_INFO);
    4741                 :             : extern tree build4 (enum tree_code, tree, tree, tree, tree,
    4742                 :             :                     tree CXX_MEM_STAT_INFO);
    4743                 :             : extern tree build5 (enum tree_code, tree, tree, tree, tree, tree,
    4744                 :             :                     tree CXX_MEM_STAT_INFO);
    4745                 :             : 
    4746                 :             : /* _loc versions of build[1-5].  */
    4747                 :             : 
    4748                 :             : inline tree
    4749                 :  1890802946 : build1_loc (location_t loc, enum tree_code code, tree type,
    4750                 :             :             tree arg1 CXX_MEM_STAT_INFO)
    4751                 :             : {
    4752                 :  1890802946 :   tree t = build1 (code, type, arg1 PASS_MEM_STAT);
    4753                 :  1890802946 :   if (CAN_HAVE_LOCATION_P (t))
    4754                 :  1890802946 :     SET_EXPR_LOCATION (t, loc);
    4755                 :  1890802946 :   return t;
    4756                 :             : }
    4757                 :             : 
    4758                 :             : inline tree
    4759                 :   481732683 : build2_loc (location_t loc, enum tree_code code, tree type, tree arg0,
    4760                 :             :             tree arg1 CXX_MEM_STAT_INFO)
    4761                 :             : {
    4762                 :   481732683 :   tree t = build2 (code, type, arg0, arg1 PASS_MEM_STAT);
    4763                 :   481732683 :   if (CAN_HAVE_LOCATION_P (t))
    4764                 :   481732683 :     SET_EXPR_LOCATION (t, loc);
    4765                 :   481732683 :   return t;
    4766                 :             : }
    4767                 :             : 
    4768                 :             : inline tree
    4769                 :   123013743 : build3_loc (location_t loc, enum tree_code code, tree type, tree arg0,
    4770                 :             :             tree arg1, tree arg2 CXX_MEM_STAT_INFO)
    4771                 :             : {
    4772                 :   123013743 :   tree t = build3 (code, type, arg0, arg1, arg2 PASS_MEM_STAT);
    4773                 :   123013743 :   if (CAN_HAVE_LOCATION_P (t))
    4774                 :   123013743 :     SET_EXPR_LOCATION (t, loc);
    4775                 :   123013743 :   return t;
    4776                 :             : }
    4777                 :             : 
    4778                 :             : inline tree
    4779                 :     4760266 : build4_loc (location_t loc, enum tree_code code, tree type, tree arg0,
    4780                 :             :             tree arg1, tree arg2, tree arg3 CXX_MEM_STAT_INFO)
    4781                 :             : {
    4782                 :     4760266 :   tree t = build4 (code, type, arg0, arg1, arg2, arg3 PASS_MEM_STAT);
    4783                 :     4760266 :   if (CAN_HAVE_LOCATION_P (t))
    4784                 :     4760266 :     SET_EXPR_LOCATION (t, loc);
    4785                 :     4760266 :   return t;
    4786                 :             : }
    4787                 :             : 
    4788                 :             : inline tree
    4789                 :        5695 : build5_loc (location_t loc, enum tree_code code, tree type, tree arg0,
    4790                 :             :             tree arg1, tree arg2, tree arg3, tree arg4 CXX_MEM_STAT_INFO)
    4791                 :             : {
    4792                 :        5695 :   tree t = build5 (code, type, arg0, arg1, arg2, arg3,
    4793                 :             :                         arg4 PASS_MEM_STAT);
    4794                 :        5695 :   if (CAN_HAVE_LOCATION_P (t))
    4795                 :        5695 :     SET_EXPR_LOCATION (t, loc);
    4796                 :        5695 :   return t;
    4797                 :             : }
    4798                 :             : 
    4799                 :             : /* Constructs double_int from tree CST.  */
    4800                 :             : 
    4801                 :             : extern tree double_int_to_tree (tree, double_int);
    4802                 :             : 
    4803                 :             : extern tree wide_int_to_tree (tree type, const poly_wide_int_ref &cst);
    4804                 :             : extern tree force_fit_type (tree, const poly_wide_int_ref &, int, bool);
    4805                 :             : 
    4806                 :             : /* Create an INT_CST node with a CST value zero extended.  */
    4807                 :             : 
    4808                 :             : /* static inline */
    4809                 :             : extern tree build_int_cst (tree, poly_int64);
    4810                 :             : extern tree build_int_cstu (tree type, poly_uint64);
    4811                 :             : extern tree build_int_cst_type (tree, poly_int64);
    4812                 :             : extern tree make_vector (unsigned, unsigned CXX_MEM_STAT_INFO);
    4813                 :             : extern tree build_vector_from_ctor (tree, const vec<constructor_elt, va_gc> *);
    4814                 :             : extern tree build_vector_from_val (tree, tree);
    4815                 :             : extern tree build_uniform_cst (tree, tree);
    4816                 :             : extern tree build_vec_series (tree, tree, tree);
    4817                 :             : extern tree build_index_vector (tree, poly_uint64, poly_uint64);
    4818                 :             : extern tree build_vector_a_then_b (tree, unsigned int, tree, tree);
    4819                 :             : extern void recompute_constructor_flags (tree);
    4820                 :             : extern void verify_constructor_flags (tree);
    4821                 :             : extern tree build_constructor (tree, vec<constructor_elt, va_gc> * CXX_MEM_STAT_INFO);
    4822                 :             : extern tree build_constructor_single (tree, tree, tree);
    4823                 :             : extern tree build_constructor_from_list (tree, tree);
    4824                 :             : extern tree build_constructor_from_vec (tree, const vec<tree, va_gc> *);
    4825                 :             : extern tree build_constructor_va (tree, int, ...);
    4826                 :             : extern tree build_clobber (tree, enum clobber_kind = CLOBBER_UNDEF);
    4827                 :             : extern tree build_real_from_int_cst (tree, const_tree);
    4828                 :             : extern tree build_real_from_wide (tree, const wide_int_ref &, signop);
    4829                 :             : extern tree build_complex (tree, tree, tree);
    4830                 :             : extern tree build_complex_inf (tree, bool);
    4831                 :             : extern tree build_each_one_cst (tree);
    4832                 :             : extern tree build_one_cst (tree);
    4833                 :             : extern tree build_minus_one_cst (tree);
    4834                 :             : extern tree build_all_ones_cst (tree);
    4835                 :             : extern tree build_zero_cst (tree);
    4836                 :             : extern tree build_replicated_int_cst (tree, unsigned, HOST_WIDE_INT);
    4837                 :             : extern tree sign_mask_for (tree);
    4838                 :             : extern tree build_string (unsigned, const char * = NULL);
    4839                 :             : extern tree build_poly_int_cst (tree, const poly_wide_int_ref &);
    4840                 :             : extern tree build_tree_list (tree, tree CXX_MEM_STAT_INFO);
    4841                 :             : extern tree build_tree_list_vec (const vec<tree, va_gc> * CXX_MEM_STAT_INFO);
    4842                 :             : extern tree build_decl (location_t, enum tree_code,
    4843                 :             :                         tree, tree CXX_MEM_STAT_INFO);
    4844                 :             : extern tree build_debug_expr_decl (tree type);
    4845                 :             : extern tree build_fn_decl (const char *, tree);
    4846                 :             : extern tree build_translation_unit_decl (tree);
    4847                 :             : extern tree build_block (tree, tree, tree, tree);
    4848                 :             : extern tree build_empty_stmt (location_t);
    4849                 :             : extern tree build_omp_clause (location_t, enum omp_clause_code);
    4850                 :             : 
    4851                 :             : extern tree build_vl_exp (enum tree_code, int CXX_MEM_STAT_INFO);
    4852                 :             : 
    4853                 :             : extern tree build_call_nary (tree, tree, int, ...);
    4854                 :             : extern tree build_call_valist (tree, tree, int, va_list);
    4855                 :             : #define build_call_array(T1,T2,N,T3)\
    4856                 :             :    build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T3)
    4857                 :             : extern tree build_call_array_loc (location_t, tree, tree, int, const tree *);
    4858                 :             : extern tree build_call_vec (tree, tree, const vec<tree, va_gc> *);
    4859                 :             : extern tree build_call_expr_loc_array (location_t, tree, int, tree *);
    4860                 :             : extern tree build_call_expr_loc_vec (location_t, tree, vec<tree, va_gc> *);
    4861                 :             : extern tree build_call_expr_loc (location_t, tree, int, ...);
    4862                 :             : extern tree build_call_expr (tree, int, ...);
    4863                 :             : extern tree build_call_expr_internal_loc (location_t, enum internal_fn,
    4864                 :             :                                           tree, int, ...);
    4865                 :             : extern tree build_call_expr_internal_loc_array (location_t, enum internal_fn,
    4866                 :             :                                                 tree, int, const tree *);
    4867                 :             : extern tree maybe_build_call_expr_loc (location_t, combined_fn, tree,
    4868                 :             :                                        int, ...);
    4869                 :             : extern tree build_alloca_call_expr (tree, unsigned int, HOST_WIDE_INT);
    4870                 :             : extern tree build_string_literal (unsigned, const char * = NULL,
    4871                 :             :                                   tree = char_type_node,
    4872                 :             :                                   unsigned HOST_WIDE_INT = HOST_WIDE_INT_M1U);
    4873                 :        8807 : inline tree build_string_literal (const char *p)
    4874                 :        8807 : { return build_string_literal (strlen (p) + 1, p); }
    4875                 :         664 : inline tree build_string_literal (tree t)
    4876                 :             : {
    4877                 :         664 :   return build_string_literal (IDENTIFIER_LENGTH (t) + 1,
    4878                 :         664 :                                IDENTIFIER_POINTER (t));
    4879                 :             : }
    4880                 :             : 
    4881                 :             : /* Construct various nodes representing data types.  */
    4882                 :             : 
    4883                 :             : extern tree signed_or_unsigned_type_for (int, tree);
    4884                 :             : extern tree signed_type_for (tree);
    4885                 :             : extern tree unsigned_type_for (tree);
    4886                 :             : extern bool is_truth_type_for (tree, tree);
    4887                 :             : extern bool tree_zero_one_valued_p (tree);
    4888                 :             : extern tree truth_type_for (tree);
    4889                 :             : extern tree build_pointer_type_for_mode (tree, machine_mode, bool);
    4890                 :             : extern tree build_pointer_type (tree);
    4891                 :             : extern tree build_reference_type_for_mode (tree, machine_mode, bool);
    4892                 :             : extern tree build_reference_type (tree);
    4893                 :             : extern tree build_vector_type_for_mode (tree, machine_mode);
    4894                 :             : extern tree build_vector_type (tree, poly_int64);
    4895                 :             : extern tree build_truth_vector_type_for_mode (poly_uint64, machine_mode);
    4896                 :             : extern tree build_opaque_vector_type (tree, poly_int64);
    4897                 :             : extern tree build_index_type (tree);
    4898                 :             : extern tree build_array_type_1 (tree, tree, bool, bool, bool);
    4899                 :             : extern tree build_array_type (tree, tree, bool = false);
    4900                 :             : extern tree build_nonshared_array_type (tree, tree);
    4901                 :             : extern tree build_array_type_nelts (tree, poly_uint64);
    4902                 :             : extern tree build_function_type (tree, tree, bool = false);
    4903                 :             : extern tree build_function_type_list (tree, ...);
    4904                 :             : extern tree build_varargs_function_type_list (tree, ...);
    4905                 :             : extern tree build_function_type_array (tree, int, tree *);
    4906                 :             : extern tree build_varargs_function_type_array (tree, int, tree *);
    4907                 :             : #define build_function_type_vec(RET, V) \
    4908                 :             :   build_function_type_array (RET, vec_safe_length (V), vec_safe_address (V))
    4909                 :             : #define build_varargs_function_type_vec(RET, V) \
    4910                 :             :   build_varargs_function_type_array (RET, vec_safe_length (V), \
    4911                 :             :                                      vec_safe_address (V))
    4912                 :             : extern tree build_method_type_directly (tree, tree, tree);
    4913                 :             : extern tree build_method_type (tree, tree);
    4914                 :             : extern tree build_offset_type (tree, tree);
    4915                 :             : extern tree build_complex_type (tree, bool named = false);
    4916                 :             : extern tree array_type_nelts (const_tree);
    4917                 :             : 
    4918                 :             : extern tree value_member (tree, tree);
    4919                 :             : extern tree purpose_member (const_tree, tree);
    4920                 :             : extern bool vec_member (const_tree, vec<tree, va_gc> *);
    4921                 :             : extern tree chain_index (int, tree);
    4922                 :             : 
    4923                 :             : /* Arguments may be null.  */
    4924                 :             : extern bool tree_int_cst_equal (const_tree, const_tree);
    4925                 :             : 
    4926                 :             : /* The following predicates are safe to call with a null argument.  */
    4927                 :             : extern bool tree_fits_shwi_p (const_tree) ATTRIBUTE_PURE;
    4928                 :             : extern bool tree_fits_poly_int64_p (const_tree) ATTRIBUTE_PURE;
    4929                 :             : extern bool tree_fits_uhwi_p (const_tree) ATTRIBUTE_PURE;
    4930                 :             : extern bool tree_fits_poly_uint64_p (const_tree) ATTRIBUTE_PURE;
    4931                 :             : 
    4932                 :             : extern HOST_WIDE_INT tree_to_shwi (const_tree)
    4933                 :             :   ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
    4934                 :             : extern poly_int64 tree_to_poly_int64 (const_tree)
    4935                 :             :   ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
    4936                 :             : extern unsigned HOST_WIDE_INT tree_to_uhwi (const_tree)
    4937                 :             :   ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
    4938                 :             : extern poly_uint64 tree_to_poly_uint64 (const_tree)
    4939                 :             :   ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
    4940                 :             : #if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003)
    4941                 :             : extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
    4942                 :             : tree_to_shwi (const_tree t)
    4943                 :             : {
    4944                 :             :   gcc_assert (tree_fits_shwi_p (t));
    4945                 :             :   return TREE_INT_CST_LOW (t);
    4946                 :             : }
    4947                 :             : 
    4948                 :             : extern inline __attribute__ ((__gnu_inline__)) unsigned HOST_WIDE_INT
    4949                 :             : tree_to_uhwi (const_tree t)
    4950                 :             : {
    4951                 :             :   gcc_assert (tree_fits_uhwi_p (t));
    4952                 :             :   return TREE_INT_CST_LOW (t);
    4953                 :             : }
    4954                 :             : #if NUM_POLY_INT_COEFFS == 1
    4955                 :             : extern inline __attribute__ ((__gnu_inline__)) poly_int64
    4956                 :             : tree_to_poly_int64 (const_tree t)
    4957                 :             : {
    4958                 :             :   gcc_assert (tree_fits_poly_int64_p (t));
    4959                 :             :   return TREE_INT_CST_LOW (t);
    4960                 :             : }
    4961                 :             : 
    4962                 :             : extern inline __attribute__ ((__gnu_inline__)) poly_uint64
    4963                 :             : tree_to_poly_uint64 (const_tree t)
    4964                 :             : {
    4965                 :             :   gcc_assert (tree_fits_poly_uint64_p (t));
    4966                 :             :   return TREE_INT_CST_LOW (t);
    4967                 :             : }
    4968                 :             : #endif
    4969                 :             : #endif
    4970                 :             : extern int tree_int_cst_sgn (const_tree);
    4971                 :             : extern int tree_int_cst_sign_bit (const_tree);
    4972                 :             : extern unsigned int tree_int_cst_min_precision (tree, signop);
    4973                 :             : extern tree excess_precision_type (tree);
    4974                 :             : 
    4975                 :             : /* Recursively examines the array elements of TYPE, until a non-array
    4976                 :             :    element type is found.  */
    4977                 :             : 
    4978                 :             : inline tree
    4979                 : 43210311154 : strip_array_types (tree type)
    4980                 :             : {
    4981                 : 43272423759 :   while (TREE_CODE (type) == ARRAY_TYPE)
    4982                 :    62112605 :     type = TREE_TYPE (type);
    4983                 :             : 
    4984                 : 43210311154 :   return type;
    4985                 :             : }
    4986                 :             : 
    4987                 :             : /* Desription of the reason why the argument of valid_constant_size_p
    4988                 :             :    is not a valid size.  */
    4989                 :             : enum cst_size_error {
    4990                 :             :   cst_size_ok,
    4991                 :             :   cst_size_not_constant,
    4992                 :             :   cst_size_negative,
    4993                 :             :   cst_size_too_big,
    4994                 :             :   cst_size_overflow
    4995                 :             : };
    4996                 :             : 
    4997                 :             : extern bool valid_constant_size_p (const_tree, cst_size_error * = NULL);
    4998                 :             : extern tree max_object_size ();
    4999                 :             : 
    5000                 :             : /* Return true if T holds a value that can be represented as a poly_int64
    5001                 :             :    without loss of precision.  Store the value in *VALUE if so.  */
    5002                 :             : 
    5003                 :             : inline bool
    5004                 :   266128498 : poly_int_tree_p (const_tree t, poly_int64 *value)
    5005                 :             : {
    5006                 :   266128498 :   if (tree_fits_poly_int64_p (t))
    5007                 :             :     {
    5008                 :   229768484 :       *value = tree_to_poly_int64 (t);
    5009                 :   229768484 :       return true;
    5010                 :             :     }
    5011                 :             :   return false;
    5012                 :             : }
    5013                 :             : 
    5014                 :             : /* Return true if T holds a value that can be represented as a poly_uint64
    5015                 :             :    without loss of precision.  Store the value in *VALUE if so.  */
    5016                 :             : 
    5017                 :             : inline bool
    5018                 :   321120933 : poly_int_tree_p (const_tree t, poly_uint64 *value)
    5019                 :             : {
    5020                 :   321120933 :   if (tree_fits_poly_uint64_p (t))
    5021                 :             :     {
    5022                 :   319816926 :       *value = tree_to_poly_uint64 (t);
    5023                 :   319816926 :       return true;
    5024                 :             :     }
    5025                 :             :   return false;
    5026                 :             : }
    5027                 :             : 
    5028                 :             : /* From expmed.cc.  Since rtl.h is included after tree.h, we can't
    5029                 :             :    put the prototype here.  Rtl.h does declare the prototype if
    5030                 :             :    tree.h had been included.  */
    5031                 :             : 
    5032                 :             : extern tree make_tree (tree, rtx);
    5033                 :             : 
    5034                 :             : /* Returns true iff CAND and BASE have equivalent language-specific
    5035                 :             :    qualifiers.  */
    5036                 :             : 
    5037                 :             : extern bool check_lang_type (const_tree cand, const_tree base);
    5038                 :             : 
    5039                 :             : /* Returns true iff unqualified CAND and BASE are equivalent.  */
    5040                 :             : 
    5041                 :             : extern bool check_base_type (const_tree cand, const_tree base);
    5042                 :             : 
    5043                 :             : /* Check whether CAND is suitable to be returned from get_qualified_type
    5044                 :             :    (BASE, TYPE_QUALS).  */
    5045                 :             : 
    5046                 :             : extern bool check_qualified_type (const_tree, const_tree, int);
    5047                 :             : 
    5048                 :             : /* Return a version of the TYPE, qualified as indicated by the
    5049                 :             :    TYPE_QUALS, if one exists.  If no qualified version exists yet,
    5050                 :             :    return NULL_TREE.  */
    5051                 :             : 
    5052                 :             : extern tree get_qualified_type (tree, int);
    5053                 :             : 
    5054                 :             : /* Like get_qualified_type, but creates the type if it does not
    5055                 :             :    exist.  This function never returns NULL_TREE.  */
    5056                 :             : 
    5057                 :             : extern tree build_qualified_type (tree, int CXX_MEM_STAT_INFO);
    5058                 :             : 
    5059                 :             : /* Create a variant of type T with alignment ALIGN.  */
    5060                 :             : 
    5061                 :             : extern tree build_aligned_type (tree, unsigned int);
    5062                 :             : 
    5063                 :             : /* Like build_qualified_type, but only deals with the `const' and
    5064                 :             :    `volatile' qualifiers.  This interface is retained for backwards
    5065                 :             :    compatibility with the various front-ends; new code should use
    5066                 :             :    build_qualified_type instead.  */
    5067                 :             : 
    5068                 :             : #define build_type_variant(TYPE, CONST_P, VOLATILE_P)                   \
    5069                 :             :   build_qualified_type ((TYPE),                                         \
    5070                 :             :                         ((CONST_P) ? TYPE_QUAL_CONST : 0)               \
    5071                 :             :                         | ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0))
    5072                 :             : 
    5073                 :             : /* Make a copy of a type node.  */
    5074                 :             : 
    5075                 :             : extern tree build_distinct_type_copy (tree CXX_MEM_STAT_INFO);
    5076                 :             : extern tree build_variant_type_copy (tree CXX_MEM_STAT_INFO);
    5077                 :             : 
    5078                 :             : /* Given a hashcode and a ..._TYPE node (for which the hashcode was made),
    5079                 :             :    return a canonicalized ..._TYPE node, so that duplicates are not made.
    5080                 :             :    How the hash code is computed is up to the caller, as long as any two
    5081                 :             :    callers that could hash identical-looking type nodes agree.  */
    5082                 :             : 
    5083                 :             : extern hashval_t type_hash_canon_hash (tree);
    5084                 :             : extern tree type_hash_canon (unsigned int, tree);
    5085                 :             : 
    5086                 :             : extern tree convert (tree, tree);
    5087                 :             : extern tree size_in_bytes_loc (location_t, const_tree);
    5088                 :             : inline tree
    5089                 :    18154360 : size_in_bytes (const_tree t)
    5090                 :             : {
    5091                 :    18154360 :   return size_in_bytes_loc (input_location, t);
    5092                 :             : }
    5093                 :             : 
    5094                 :             : extern HOST_WIDE_INT int_size_in_bytes (const_tree);
    5095                 :             : extern HOST_WIDE_INT max_int_size_in_bytes (const_tree);
    5096                 :             : extern tree bit_position (const_tree);
    5097                 :             : extern tree byte_position (const_tree);
    5098                 :             : extern HOST_WIDE_INT int_byte_position (const_tree);
    5099                 :             : 
    5100                 :             : /* Type for sizes of data-type.  */
    5101                 :             : 
    5102                 :             : #define sizetype sizetype_tab[(int) stk_sizetype]
    5103                 :             : #define bitsizetype sizetype_tab[(int) stk_bitsizetype]
    5104                 :             : #define ssizetype sizetype_tab[(int) stk_ssizetype]
    5105                 :             : #define sbitsizetype sizetype_tab[(int) stk_sbitsizetype]
    5106                 :             : #define size_int(L) size_int_kind (L, stk_sizetype)
    5107                 :             : #define ssize_int(L) size_int_kind (L, stk_ssizetype)
    5108                 :             : #define bitsize_int(L) size_int_kind (L, stk_bitsizetype)
    5109                 :             : #define sbitsize_int(L) size_int_kind (L, stk_sbitsizetype)
    5110                 :             : 
    5111                 :             : /* Log2 of BITS_PER_UNIT.  */
    5112                 :             : 
    5113                 :             : #if BITS_PER_UNIT == 8
    5114                 :             : #define LOG2_BITS_PER_UNIT 3
    5115                 :             : #elif BITS_PER_UNIT == 16
    5116                 :             : #define LOG2_BITS_PER_UNIT 4
    5117                 :             : #else
    5118                 :             : #error Unknown BITS_PER_UNIT
    5119                 :             : #endif
    5120                 :             : 
    5121                 :             : /* Concatenate two lists (chains of TREE_LIST nodes) X and Y
    5122                 :             :    by making the last node in X point to Y.
    5123                 :             :    Returns X, except if X is 0 returns Y.  */
    5124                 :             : 
    5125                 :             : extern tree chainon (tree, tree);
    5126                 :             : 
    5127                 :             : /* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN.  */
    5128                 :             : 
    5129                 :             : extern tree tree_cons (tree, tree, tree CXX_MEM_STAT_INFO);
    5130                 :             : 
    5131                 :             : /* Return the last tree node in a chain.  */
    5132                 :             : 
    5133                 :             : extern tree tree_last (tree);
    5134                 :             : 
    5135                 :             : /* Reverse the order of elements in a chain, and return the new head.  */
    5136                 :             : 
    5137                 :             : extern tree nreverse (tree);
    5138                 :             : 
    5139                 :             : /* Returns the length of a chain of nodes
    5140                 :             :    (number of chain pointers to follow before reaching a null pointer).  */
    5141                 :             : 
    5142                 :             : extern int list_length (const_tree);
    5143                 :             : 
    5144                 :             : /* Returns the first/last FIELD_DECL in a RECORD_TYPE.  */
    5145                 :             : 
    5146                 :             : extern tree first_field (const_tree) ATTRIBUTE_NONNULL (1);
    5147                 :             : extern tree last_field (const_tree) ATTRIBUTE_NONNULL (1);
    5148                 :             : 
    5149                 :             : /* Given an initializer INIT, return TRUE if INIT is zero or some
    5150                 :             :    aggregate of zeros.  Otherwise return FALSE.  If NONZERO is not
    5151                 :             :    null, set *NONZERO if and only if INIT is known not to be all
    5152                 :             :    zeros.  The combination of return value of false and *NONZERO
    5153                 :             :    false implies that INIT may but need not be all zeros.  Other
    5154                 :             :    combinations indicate definitive answers.  */
    5155                 :             : 
    5156                 :             : extern bool initializer_zerop (const_tree, bool * = NULL);
    5157                 :             : extern bool initializer_each_zero_or_onep (const_tree);
    5158                 :             : 
    5159                 :             : extern tree vector_cst_elt (const_tree, unsigned int);
    5160                 :             : 
    5161                 :             : /* Given a vector VEC, return its first element if all elements are
    5162                 :             :    the same.  Otherwise return NULL_TREE.  */
    5163                 :             : 
    5164                 :             : extern tree uniform_vector_p (const_tree);
    5165                 :             : 
    5166                 :             : /* If the argument is INTEGER_CST, return it.  If the argument is vector
    5167                 :             :    with all elements the same INTEGER_CST, return that INTEGER_CST.  Otherwise
    5168                 :             :    return NULL_TREE.  */
    5169                 :             : 
    5170                 :             : extern tree uniform_integer_cst_p (tree);
    5171                 :             : 
    5172                 :             : extern int single_nonzero_element (const_tree);
    5173                 :             : 
    5174                 :             : /* Given a CONSTRUCTOR CTOR, return the element values as a vector.  */
    5175                 :             : 
    5176                 :             : extern vec<tree, va_gc> *ctor_to_vec (tree);
    5177                 :             : 
    5178                 :             : /* zerop (tree x) is nonzero if X is a constant of value 0.  */
    5179                 :             : 
    5180                 :             : extern bool zerop (const_tree);
    5181                 :             : 
    5182                 :             : /* integer_zerop (tree x) is nonzero if X is an integer constant of value 0.  */
    5183                 :             : 
    5184                 :             : extern bool integer_zerop (const_tree);
    5185                 :             : 
    5186                 :             : /* integer_onep (tree x) is nonzero if X is an integer constant of value 1.  */
    5187                 :             : 
    5188                 :             : extern bool integer_onep (const_tree);
    5189                 :             : 
    5190                 :             : /* integer_onep (tree x) is nonzero if X is an integer constant of value 1, or
    5191                 :             :    a vector or complex where each part is 1.  */
    5192                 :             : 
    5193                 :             : extern bool integer_each_onep (const_tree);
    5194                 :             : 
    5195                 :             : /* integer_all_onesp (tree x) is nonzero if X is an integer constant
    5196                 :             :    all of whose significant bits are 1.  */
    5197                 :             : 
    5198                 :             : extern bool integer_all_onesp (const_tree);
    5199                 :             : 
    5200                 :             : /* integer_minus_onep (tree x) is nonzero if X is an integer constant of
    5201                 :             :    value -1.  */
    5202                 :             : 
    5203                 :             : extern bool integer_minus_onep (const_tree);
    5204                 :             : 
    5205                 :             : /* integer_pow2p (tree x) is nonzero is X is an integer constant with
    5206                 :             :    exactly one bit 1.  */
    5207                 :             : 
    5208                 :             : extern bool integer_pow2p (const_tree);
    5209                 :             : 
    5210                 :             : /* Checks to see if T is a constant or a constant vector and if each element E
    5211                 :             :    adheres to ~E + 1 == pow2 then return ~E otherwise NULL_TREE.  */
    5212                 :             : 
    5213                 :             : extern tree bitmask_inv_cst_vector_p (tree);
    5214                 :             : 
    5215                 :             : /* integer_nonzerop (tree x) is nonzero if X is an integer constant
    5216                 :             :    with a nonzero value.  */
    5217                 :             : 
    5218                 :             : extern bool integer_nonzerop (const_tree);
    5219                 :             : 
    5220                 :             : /* integer_truep (tree x) is nonzero if X is an integer constant of value 1 or
    5221                 :             :    a vector where each element is an integer constant of value -1.  */
    5222                 :             : 
    5223                 :             : extern bool integer_truep (const_tree);
    5224                 :             : 
    5225                 :             : extern bool cst_and_fits_in_hwi (const_tree);
    5226                 :             : extern tree num_ending_zeros (const_tree);
    5227                 :             : 
    5228                 :             : /* fixed_zerop (tree x) is nonzero if X is a fixed-point constant of
    5229                 :             :    value 0.  */
    5230                 :             : 
    5231                 :             : extern bool fixed_zerop (const_tree);
    5232                 :             : 
    5233                 :             : /* staticp (tree x) is nonzero if X is a reference to data allocated
    5234                 :             :    at a fixed address in memory.  Returns the outermost data.  */
    5235                 :             : 
    5236                 :             : extern tree staticp (tree);
    5237                 :             : 
    5238                 :             : /* save_expr (EXP) returns an expression equivalent to EXP
    5239                 :             :    but it can be used multiple times within context CTX
    5240                 :             :    and only evaluate EXP once.  */
    5241                 :             : 
    5242                 :             : extern tree save_expr (tree);
    5243                 :             : 
    5244                 :             : /* Return true if T is function-invariant.  */
    5245                 :             : 
    5246                 :             : extern bool tree_invariant_p (tree);
    5247                 :             : 
    5248                 :             : /* Look inside EXPR into any simple arithmetic operations.  Return the
    5249                 :             :    outermost non-arithmetic or non-invariant node.  */
    5250                 :             : 
    5251                 :             : extern tree skip_simple_arithmetic (tree);
    5252                 :             : 
    5253                 :             : /* Look inside EXPR into simple arithmetic operations involving constants.
    5254                 :             :    Return the outermost non-arithmetic or non-constant node.  */
    5255                 :             : 
    5256                 :             : extern tree skip_simple_constant_arithmetic (tree);
    5257                 :             : 
    5258                 :             : /* Return which tree structure is used by T.  */
    5259                 :             : 
    5260                 :             : enum tree_node_structure_enum tree_node_structure (const_tree);
    5261                 :             : 
    5262                 :             : /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
    5263                 :             :    size or offset that depends on a field within a record.  */
    5264                 :             : 
    5265                 :             : extern bool contains_placeholder_p (const_tree);
    5266                 :             : 
    5267                 :             : /* This macro calls the above function but short-circuits the common
    5268                 :             :    case of a constant to save time.  Also check for null.  */
    5269                 :             : 
    5270                 :             : #define CONTAINS_PLACEHOLDER_P(EXP) \
    5271                 :             :   ((EXP) != 0 && ! TREE_CONSTANT (EXP) && contains_placeholder_p (EXP))
    5272                 :             : 
    5273                 :             : /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
    5274                 :             :    directly.  This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
    5275                 :             :    field positions.  */
    5276                 :             : 
    5277                 :             : extern bool type_contains_placeholder_p (tree);
    5278                 :             : 
    5279                 :             : /* Given a tree EXP, find all occurrences of references to fields
    5280                 :             :    in a PLACEHOLDER_EXPR and place them in vector REFS without
    5281                 :             :    duplicates.  Also record VAR_DECLs and CONST_DECLs.  Note that
    5282                 :             :    we assume here that EXP contains only arithmetic expressions
    5283                 :             :    or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
    5284                 :             :    argument list.  */
    5285                 :             : 
    5286                 :             : extern void find_placeholder_in_expr (tree, vec<tree> *);
    5287                 :             : 
    5288                 :             : /* This macro calls the above function but short-circuits the common
    5289                 :             :    case of a constant to save time and also checks for NULL.  */
    5290                 :             : 
    5291                 :             : #define FIND_PLACEHOLDER_IN_EXPR(EXP, V) \
    5292                 :             : do {                                     \
    5293                 :             :   if((EXP) && !TREE_CONSTANT (EXP))      \
    5294                 :             :     find_placeholder_in_expr (EXP, V);   \
    5295                 :             : } while (0)
    5296                 :             : 
    5297                 :             : /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
    5298                 :             :    return a tree with all occurrences of references to F in a
    5299                 :             :    PLACEHOLDER_EXPR replaced by R.  Also handle VAR_DECLs and
    5300                 :             :    CONST_DECLs.  Note that we assume here that EXP contains only
    5301                 :             :    arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
    5302                 :             :    occurring only in their argument list.  */
    5303                 :             : 
    5304                 :             : extern tree substitute_in_expr (tree, tree, tree);
    5305                 :             : 
    5306                 :             : /* This macro calls the above function but short-circuits the common
    5307                 :             :    case of a constant to save time and also checks for NULL.  */
    5308                 :             : 
    5309                 :             : #define SUBSTITUTE_IN_EXPR(EXP, F, R) \
    5310                 :             :   ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP) : substitute_in_expr (EXP, F, R))
    5311                 :             : 
    5312                 :             : /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
    5313                 :             :    for it within OBJ, a tree that is an object or a chain of references.  */
    5314                 :             : 
    5315                 :             : extern tree substitute_placeholder_in_expr (tree, tree);
    5316                 :             : 
    5317                 :             : /* This macro calls the above function but short-circuits the common
    5318                 :             :    case of a constant to save time and also checks for NULL.  */
    5319                 :             : 
    5320                 :             : #define SUBSTITUTE_PLACEHOLDER_IN_EXPR(EXP, OBJ) \
    5321                 :             :   ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP)    \
    5322                 :             :    : substitute_placeholder_in_expr (EXP, OBJ))
    5323                 :             : 
    5324                 :             : 
    5325                 :             : /* stabilize_reference (EXP) returns a reference equivalent to EXP
    5326                 :             :    but it can be used multiple times
    5327                 :             :    and only evaluate the subexpressions once.  */
    5328                 :             : 
    5329                 :             : extern tree stabilize_reference (tree);
    5330                 :             : 
    5331                 :             : /* Return EXP, stripped of any conversions to wider types
    5332                 :             :    in such a way that the result of converting to type FOR_TYPE
    5333                 :             :    is the same as if EXP were converted to FOR_TYPE.
    5334                 :             :    If FOR_TYPE is 0, it signifies EXP's type.  */
    5335                 :             : 
    5336                 :             : extern tree get_unwidened (tree, tree);
    5337                 :             : 
    5338                 :             : /* Return OP or a simpler expression for a narrower value
    5339                 :             :    which can be sign-extended or zero-extended to give back OP.
    5340                 :             :    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
    5341                 :             :    or 0 if the value should be sign-extended.  */
    5342                 :             : 
    5343                 :             : extern tree get_narrower (tree, int *);
    5344                 :             : 
    5345                 :             : /* Return true if T is an expression that get_inner_reference handles.  */
    5346                 :             : 
    5347                 :             : inline bool
    5348                 : 31881375168 : handled_component_p (const_tree t)
    5349                 :             : {
    5350                 : 31559247787 :   switch (TREE_CODE (t))
    5351                 :             :     {
    5352                 :             :     case COMPONENT_REF:
    5353                 :             :     case BIT_FIELD_REF:
    5354                 :             :     case ARRAY_REF:
    5355                 :             :     case ARRAY_RANGE_REF:
    5356                 :             :     case REALPART_EXPR:
    5357                 :             :     case IMAGPART_EXPR:
    5358                 :             :     case VIEW_CONVERT_EXPR:
    5359                 :             :       return true;
    5360                 :             : 
    5361                 : 15925724119 :     default:
    5362                 : 15925721613 :       return false;
    5363                 :             :     }
    5364                 :             : }
    5365                 :             : 
    5366                 :             : /* Return true T is a component with reverse storage order.  */
    5367                 :             : 
    5368                 :             : inline bool
    5369                 :  2937311922 : reverse_storage_order_for_component_p (tree t)
    5370                 :             : {
    5371                 :             :   /* The storage order only applies to scalar components.  */
    5372                 :  5735480101 :   if (AGGREGATE_TYPE_P (TREE_TYPE (t))
    5373                 :  2240150998 :       || POINTER_TYPE_P (TREE_TYPE (t))
    5374                 :  4444289631 :       || VECTOR_TYPE_P (TREE_TYPE (t)))
    5375                 :             :     return false;
    5376                 :             : 
    5377                 :  1410506860 :   if (TREE_CODE (t) == REALPART_EXPR || TREE_CODE (t) == IMAGPART_EXPR)
    5378                 :    10519323 :     t = TREE_OPERAND (t, 0);
    5379                 :             : 
    5380                 :  1410506860 :   switch (TREE_CODE (t))
    5381                 :             :     {
    5382                 :  1058039747 :     case ARRAY_REF:
    5383                 :  1058039747 :     case COMPONENT_REF:
    5384                 :             :       /* ??? Fortran can take COMPONENT_REF of a VOID_TYPE.  */
    5385                 :             :       /* ??? UBSan can take COMPONENT_REF of a REFERENCE_TYPE.  */
    5386                 :  1936267650 :       return AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (t, 0)))
    5387                 :  1936258594 :              && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (TREE_OPERAND (t, 0)));
    5388                 :             : 
    5389                 :   182868996 :     case BIT_FIELD_REF:
    5390                 :   182868996 :     case MEM_REF:
    5391                 :   182868996 :       return REF_REVERSE_STORAGE_ORDER (t);
    5392                 :             : 
    5393                 :             :     case ARRAY_RANGE_REF:
    5394                 :             :     case VIEW_CONVERT_EXPR:
    5395                 :             :     default:
    5396                 :             :       return false;
    5397                 :             :     }
    5398                 :             : }
    5399                 :             : 
    5400                 :             : /* Return true if T is a storage order barrier, i.e. a VIEW_CONVERT_EXPR
    5401                 :             :    that can modify the storage order of objects.  Note that, even if the
    5402                 :             :    TYPE_REVERSE_STORAGE_ORDER flag is set on both the inner type and the
    5403                 :             :    outer type, a VIEW_CONVERT_EXPR can modify the storage order because
    5404                 :             :    it can change the partition of the aggregate object into scalars.  */
    5405                 :             : 
    5406                 :             : inline bool
    5407                 :    66583688 : storage_order_barrier_p (const_tree t)
    5408                 :             : {
    5409                 :    66583688 :   if (TREE_CODE (t) != VIEW_CONVERT_EXPR)
    5410                 :             :     return false;
    5411                 :             : 
    5412                 :     3564494 :   if (AGGREGATE_TYPE_P (TREE_TYPE (t))
    5413                 :     3502504 :       && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (t)))
    5414                 :             :     return true;
    5415                 :             : 
    5416                 :     1943567 :   tree op = TREE_OPERAND (t, 0);
    5417                 :             : 
    5418                 :     3865170 :   if (AGGREGATE_TYPE_P (TREE_TYPE (op))
    5419                 :     3507615 :       && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (op)))
    5420                 :             :     return true;
    5421                 :             : 
    5422                 :             :   return false;
    5423                 :             : }
    5424                 :             : 
    5425                 :             : /* Given a DECL or TYPE, return the scope in which it was declared, or
    5426                 :             :    NUL_TREE if there is no containing scope.  */
    5427                 :             : 
    5428                 :             : extern tree get_containing_scope (const_tree);
    5429                 :             : 
    5430                 :             : /* Returns the ultimate TRANSLATION_UNIT_DECL context of DECL or NULL.  */
    5431                 :             : 
    5432                 :             : extern const_tree get_ultimate_context (const_tree);
    5433                 :             : 
    5434                 :             : /* Return the FUNCTION_DECL which provides this _DECL with its context,
    5435                 :             :    or zero if none.  */
    5436                 :             : extern tree decl_function_context (const_tree);
    5437                 :             : 
    5438                 :             : /* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides
    5439                 :             :    this _DECL with its context, or zero if none.  */
    5440                 :             : extern tree decl_type_context (const_tree);
    5441                 :             : 
    5442                 :             : /* Return true if EXPR is the real constant zero.  */
    5443                 :             : extern bool real_zerop (const_tree);
    5444                 :             : 
    5445                 :             : /* Initialize the iterator I with arguments from function FNDECL  */
    5446                 :             : 
    5447                 :             : inline void
    5448                 :  1206744720 : function_args_iter_init (function_args_iterator *i, const_tree fntype)
    5449                 :             : {
    5450                 :  1206744720 :   i->next = TYPE_ARG_TYPES (fntype);
    5451                 :  1206744720 : }
    5452                 :             : 
    5453                 :             : /* Return a pointer that holds the next argument if there are more arguments to
    5454                 :             :    handle, otherwise return NULL.  */
    5455                 :             : 
    5456                 :             : inline tree *
    5457                 :             : function_args_iter_cond_ptr (function_args_iterator *i)
    5458                 :             : {
    5459                 :             :   return (i->next) ? &TREE_VALUE (i->next) : NULL;
    5460                 :             : }
    5461                 :             : 
    5462                 :             : /* Return the next argument if there are more arguments to handle, otherwise
    5463                 :             :    return NULL.  */
    5464                 :             : 
    5465                 :             : inline tree
    5466                 :  1884602505 : function_args_iter_cond (function_args_iterator *i)
    5467                 :             : {
    5468                 :  1884602505 :   return (i->next) ? TREE_VALUE (i->next) : NULL_TREE;
    5469                 :             : }
    5470                 :             : 
    5471                 :             : /* Advance to the next argument.  */
    5472                 :             : inline void
    5473                 :   681276474 : function_args_iter_next (function_args_iterator *i)
    5474                 :             : {
    5475                 :   681276474 :   gcc_assert (i->next != NULL_TREE);
    5476                 :   681276474 :   i->next = TREE_CHAIN (i->next);
    5477                 :   681276474 : }
    5478                 :             : 
    5479                 :             : /* Returns true if a BLOCK has a source location.
    5480                 :             :    BLOCK_SOURCE_LOCATION is set only to inlined function entry points,
    5481                 :             :    so the function returns true for all but the innermost and outermost
    5482                 :             :    blocks into which an expression has been inlined.  */
    5483                 :             : 
    5484                 :             : inline bool
    5485                 :    40895923 : inlined_function_outer_scope_p (const_tree block)
    5486                 :             : {
    5487                 :    40895923 :  return LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block)) != UNKNOWN_LOCATION;
    5488                 :             : }
    5489                 :             : 
    5490                 :             : /* Loop over all function arguments of FNTYPE.  In each iteration, PTR is set
    5491                 :             :    to point to the next tree element.  ITER is an instance of
    5492                 :             :    function_args_iterator used to iterate the arguments.  */
    5493                 :             : #define FOREACH_FUNCTION_ARGS_PTR(FNTYPE, PTR, ITER)                    \
    5494                 :             :   for (function_args_iter_init (&(ITER), (FNTYPE));                 \
    5495                 :             :        (PTR = function_args_iter_cond_ptr (&(ITER))) != NULL;               \
    5496                 :             :        function_args_iter_next (&(ITER)))
    5497                 :             : 
    5498                 :             : /* Loop over all function arguments of FNTYPE.  In each iteration, TREE is set
    5499                 :             :    to the next tree element.  ITER is an instance of function_args_iterator
    5500                 :             :    used to iterate the arguments.  */
    5501                 :             : #define FOREACH_FUNCTION_ARGS(FNTYPE, TREE, ITER)                       \
    5502                 :             :   for (function_args_iter_init (&(ITER), (FNTYPE));                 \
    5503                 :             :        (TREE = function_args_iter_cond (&(ITER))) != NULL_TREE;             \
    5504                 :             :        function_args_iter_next (&(ITER)))
    5505                 :             : 
    5506                 :             : /* In tree.cc */
    5507                 :             : extern unsigned crc32_unsigned_n (unsigned, unsigned, unsigned);
    5508                 :             : extern unsigned crc32_string (unsigned, const char *);
    5509                 :             : inline unsigned
    5510                 :      625812 : crc32_unsigned (unsigned chksum, unsigned value)
    5511                 :             : {
    5512                 :      622436 :   return crc32_unsigned_n (chksum, value, 4);
    5513                 :             : }
    5514                 :             : inline unsigned
    5515                 :    13824349 : crc32_byte (unsigned chksum, char byte)
    5516                 :             : {
    5517                 :    13824349 :   return crc32_unsigned_n (chksum, byte, 1);
    5518                 :             : }
    5519                 :             : extern void clean_symbol_name (char *);
    5520                 :             : extern tree get_file_function_name (const char *);
    5521                 :             : extern tree get_callee_fndecl (const_tree);
    5522                 :             : extern combined_fn get_call_combined_fn (const_tree);
    5523                 :             : extern int type_num_arguments (const_tree);
    5524                 :             : extern tree type_argument_type (const_tree, unsigned) ATTRIBUTE_NONNULL (1);
    5525                 :             : extern bool associative_tree_code (enum tree_code);
    5526                 :             : extern bool commutative_tree_code (enum tree_code);
    5527                 :             : extern bool commutative_ternary_tree_code (enum tree_code);
    5528                 :             : extern bool operation_can_overflow (enum tree_code);
    5529                 :             : extern bool operation_no_trapping_overflow (tree, enum tree_code);
    5530                 :             : extern tree upper_bound_in_type (tree, tree);
    5531                 :             : extern tree lower_bound_in_type (tree, tree);
    5532                 :             : extern bool operand_equal_for_phi_arg_p (const_tree, const_tree);
    5533                 :             : extern tree create_artificial_label (location_t);
    5534                 :             : extern const char *get_name (tree);
    5535                 :             : extern bool stdarg_p (const_tree);
    5536                 :             : extern bool prototype_p (const_tree);
    5537                 :             : extern bool auto_var_p (const_tree);
    5538                 :             : extern bool auto_var_in_fn_p (const_tree, const_tree);
    5539                 :             : extern tree build_low_bits_mask (tree, unsigned);
    5540                 :             : extern bool tree_nop_conversion_p (const_tree, const_tree);
    5541                 :             : extern tree tree_strip_nop_conversions (tree);
    5542                 :             : extern tree tree_strip_sign_nop_conversions (tree);
    5543                 :             : extern const_tree strip_invariant_refs (const_tree);
    5544                 :             : extern tree strip_zero_offset_components (tree);
    5545                 :             : extern tree lhd_gcc_personality (void);
    5546                 :             : extern void assign_assembler_name_if_needed (tree);
    5547                 :             : extern bool warn_deprecated_use (tree, tree);
    5548                 :             : extern void error_unavailable_use (tree, tree);
    5549                 :             : extern tree cache_integer_cst (tree, bool might_duplicate = false);
    5550                 :             : extern const char *combined_fn_name (combined_fn);
    5551                 :             : 
    5552                 :             : /* Returns true if X is a typedef decl.  */
    5553                 :             : 
    5554                 :             : inline bool
    5555                 : 38077107414 : is_typedef_decl (const_tree x)
    5556                 :             : {
    5557                 : 33520203455 :   return (x && TREE_CODE (x) == TYPE_DECL
    5558                 : 34820587571 :           && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
    5559                 :             : }
    5560                 :             : 
    5561                 :             : /* Returns true iff TYPE is a type variant created for a typedef. */
    5562                 :             : 
    5563                 :             : inline bool
    5564                 : 32850140103 : typedef_variant_p (const_tree type)
    5565                 :             : {
    5566                 : 32850140103 :   return is_typedef_decl (TYPE_NAME (type));
    5567                 :             : }
    5568                 :             : 
    5569                 :             : /* Compare and hash for any structure which begins with a canonical
    5570                 :             :    pointer.  Assumes all pointers are interchangeable, which is sort
    5571                 :             :    of already assumed by gcc elsewhere IIRC.  */
    5572                 :             : 
    5573                 :             : inline int
    5574                 :             : struct_ptr_eq (const void *a, const void *b)
    5575                 :             : {
    5576                 :             :   const void * const * x = (const void * const *) a;
    5577                 :             :   const void * const * y = (const void * const *) b;
    5578                 :             :   return *x == *y;
    5579                 :             : }
    5580                 :             : 
    5581                 :             : inline hashval_t
    5582                 :             : struct_ptr_hash (const void *a)
    5583                 :             : {
    5584                 :             :   const void * const * x = (const void * const *) a;
    5585                 :             :   return (intptr_t)*x >> 4;
    5586                 :             : }
    5587                 :             : 
    5588                 :             : /* Return nonzero if CODE is a tree code that represents a truth value.  */
    5589                 :             : inline bool
    5590                 :   170780063 : truth_value_p (enum tree_code code)
    5591                 :             : {
    5592                 :   170780063 :   return (TREE_CODE_CLASS (code) == tcc_comparison
    5593                 :   159537367 :           || code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
    5594                 :   159391118 :           || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
    5595                 :   330055359 :           || code == TRUTH_XOR_EXPR || code == TRUTH_NOT_EXPR);
    5596                 :             : }
    5597                 :             : 
    5598                 :             : /* Return whether TYPE is a type suitable for an offset for
    5599                 :             :    a POINTER_PLUS_EXPR.  */
    5600                 :             : inline bool
    5601                 :   180737985 : ptrofftype_p (tree type)
    5602                 :             : {
    5603                 :   180737985 :   return (INTEGRAL_TYPE_P (type)
    5604                 :   179262345 :           && TYPE_PRECISION (type) == TYPE_PRECISION (sizetype)
    5605                 :   359971447 :           && TYPE_UNSIGNED (type) == TYPE_UNSIGNED (sizetype));
    5606                 :             : }
    5607                 :             : 
    5608                 :             : /* Return true if the argument is a complete type or an array
    5609                 :             :    of unknown bound (whose type is incomplete but) whose elements
    5610                 :             :    have complete type.  */
    5611                 :             : inline bool
    5612                 :     7994633 : complete_or_array_type_p (const_tree type)
    5613                 :             : {
    5614                 :     7994633 :   return COMPLETE_TYPE_P (type)
    5615                 :     7994633 :          || (TREE_CODE (type) == ARRAY_TYPE
    5616                 :      133787 :              && COMPLETE_TYPE_P (TREE_TYPE (type)));
    5617                 :             : }
    5618                 :             : 
    5619                 :             : /* Return true if the value of T could be represented as a poly_widest_int.  */
    5620                 :             : 
    5621                 :             : inline bool
    5622                 : 11947457028 : poly_int_tree_p (const_tree t)
    5623                 :             : {
    5624                 :  9793430534 :   return (TREE_CODE (t) == INTEGER_CST || POLY_INT_CST_P (t));
    5625                 :             : }
    5626                 :             : 
    5627                 :             : /* Return the bit size of BIT_FIELD_REF T, in cases where it is known
    5628                 :             :    to be a poly_uint64.  (This is always true at the gimple level.)  */
    5629                 :             : 
    5630                 :             : inline poly_uint64
    5631                 :      169249 : bit_field_size (const_tree t)
    5632                 :             : {
    5633                 :      169249 :   return tree_to_poly_uint64 (TREE_OPERAND (t, 1));
    5634                 :             : }
    5635                 :             : 
    5636                 :             : /* Return the starting bit offset of BIT_FIELD_REF T, in cases where it is
    5637                 :             :    known to be a poly_uint64.  (This is always true at the gimple level.)  */
    5638                 :             : 
    5639                 :             : inline poly_uint64
    5640                 :      717267 : bit_field_offset (const_tree t)
    5641                 :             : {
    5642                 :      717267 :   return tree_to_poly_uint64 (TREE_OPERAND (t, 2));
    5643                 :             : }
    5644                 :             : 
    5645                 :             : extern tree strip_float_extensions (tree);
    5646                 :             : extern bool really_constant_p (const_tree);
    5647                 :             : extern bool ptrdiff_tree_p (const_tree, poly_int64 *);
    5648                 :             : extern bool decl_address_invariant_p (const_tree);
    5649                 :             : extern bool decl_address_ip_invariant_p (const_tree);
    5650                 :             : extern bool int_fits_type_p (const_tree, const_tree)
    5651                 :             :   ATTRIBUTE_NONNULL (1) ATTRIBUTE_NONNULL (2) ATTRIBUTE_PURE;
    5652                 :             : #ifndef GENERATOR_FILE
    5653                 :             : extern void get_type_static_bounds (const_tree, mpz_t, mpz_t);
    5654                 :             : #endif
    5655                 :             : extern bool variably_modified_type_p (tree, tree);
    5656                 :             : extern int tree_log2 (const_tree);
    5657                 :             : extern int tree_floor_log2 (const_tree);
    5658                 :             : extern unsigned int tree_ctz (const_tree);
    5659                 :             : extern int simple_cst_equal (const_tree, const_tree);
    5660                 :             : 
    5661                 :             : namespace inchash
    5662                 :             : {
    5663                 :             : 
    5664                 :             : extern void add_expr (const_tree, hash &, unsigned int = 0);
    5665                 :             : 
    5666                 :             : }
    5667                 :             : 
    5668                 :             : /* Compat version until all callers are converted. Return hash for
    5669                 :             :    TREE with SEED.  */
    5670                 :  1885648889 : inline hashval_t iterative_hash_expr(const_tree tree, hashval_t seed)
    5671                 :             : {
    5672                 :  1880581416 :   inchash::hash hstate (seed);
    5673                 :  1880581416 :   inchash::add_expr (tree, hstate);
    5674                 :  1880394482 :   return hstate.end ();
    5675                 :             : }
    5676                 :             : 
    5677                 :             : extern int compare_tree_int (const_tree, unsigned HOST_WIDE_INT);
    5678                 :             : extern bool type_list_equal (const_tree, const_tree);
    5679                 :             : extern bool chain_member (const_tree, const_tree);
    5680                 :             : extern void dump_tree_statistics (void);
    5681                 :             : extern void recompute_tree_invariant_for_addr_expr (tree);
    5682                 :             : extern bool needs_to_live_in_memory (const_tree);
    5683                 :             : extern tree reconstruct_complex_type (tree, tree);
    5684                 :             : extern bool real_onep (const_tree);
    5685                 :             : extern bool real_minus_onep (const_tree);
    5686                 :             : extern bool real_maybe_zerop (const_tree);
    5687                 :             : extern void init_ttree (void);
    5688                 :             : extern void build_common_tree_nodes (bool);
    5689                 :             : extern void build_common_builtin_nodes (void);
    5690                 :             : extern void tree_cc_finalize (void);
    5691                 :             : extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
    5692                 :             : extern tree build_nonstandard_boolean_type (unsigned HOST_WIDE_INT);
    5693                 :             : extern tree build_bitint_type (unsigned HOST_WIDE_INT, int);
    5694                 :             : extern tree build_range_type (tree, tree, tree);
    5695                 :             : extern tree build_nonshared_range_type (tree, tree, tree);
    5696                 :             : extern bool subrange_type_for_debug_p (const_tree, tree *, tree *);
    5697                 :             : extern HOST_WIDE_INT int_cst_value (const_tree);
    5698                 :             : extern tree tree_block (tree);
    5699                 :             : extern void tree_set_block (tree, tree);
    5700                 :             : extern location_t *block_nonartificial_location (tree);
    5701                 :             : extern location_t tree_nonartificial_location (tree);
    5702                 :             : extern location_t tree_inlined_location (tree, bool = true);
    5703                 :             : extern tree block_ultimate_origin (const_tree);
    5704                 :             : extern tree get_binfo_at_offset (tree, poly_int64, tree);
    5705                 :             : extern bool virtual_method_call_p (const_tree, bool = false);
    5706                 :             : extern tree obj_type_ref_class (const_tree ref, bool = false);
    5707                 :             : extern bool types_same_for_odr (const_tree type1, const_tree type2);
    5708                 :             : extern bool contains_bitfld_component_ref_p (const_tree);
    5709                 :             : extern bool block_may_fallthru (const_tree);
    5710                 :             : extern void using_eh_for_cleanups (void);
    5711                 :             : extern bool using_eh_for_cleanups_p (void);
    5712                 :             : extern const char *get_tree_code_name (enum tree_code);
    5713                 :             : extern void set_call_expr_flags (tree, int);
    5714                 :             : extern tree walk_tree_1 (tree*, walk_tree_fn, void*, hash_set<tree>*,
    5715                 :             :                          walk_tree_lh);
    5716                 :             : extern tree walk_tree_without_duplicates_1 (tree*, walk_tree_fn, void*,
    5717                 :             :                                             walk_tree_lh);
    5718                 :             : #define walk_tree(a,b,c,d) \
    5719                 :             :         walk_tree_1 (a, b, c, d, NULL)
    5720                 :             : #define walk_tree_without_duplicates(a,b,c) \
    5721                 :             :         walk_tree_without_duplicates_1 (a, b, c, NULL)
    5722                 :             : 
    5723                 :             : extern tree drop_tree_overflow (tree);
    5724                 :             : 
    5725                 :             : /* Given a memory reference expression T, return its base address.
    5726                 :             :    The base address of a memory reference expression is the main
    5727                 :             :    object being referenced.  */
    5728                 :             : extern tree get_base_address (tree t);
    5729                 :             : 
    5730                 :             : /* Return a tree of sizetype representing the size, in bytes, of the element
    5731                 :             :    of EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
    5732                 :             : extern tree array_ref_element_size (tree);
    5733                 :             : 
    5734                 :             : /* Return a typenode for the "standard" C type with a given name.  */
    5735                 :             : extern tree get_typenode_from_name (const char *);
    5736                 :             : 
    5737                 :             : /* Return a tree representing the upper bound of the array mentioned in
    5738                 :             :    EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
    5739                 :             : extern tree array_ref_up_bound (tree);
    5740                 :             : 
    5741                 :             : /* Return a tree representing the lower bound of the array mentioned in
    5742                 :             :    EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
    5743                 :             : extern tree array_ref_low_bound (tree);
    5744                 :             : 
    5745                 :             : /* Returns true if REF is an array reference, a component reference,
    5746                 :             :    or a memory reference to an array whose actual size might be larger
    5747                 :             :    than its upper bound implies.  */
    5748                 :             : extern bool array_ref_flexible_size_p (tree, bool * = NULL);
    5749                 :             : 
    5750                 :             : /* Return a tree representing the offset, in bytes, of the field referenced
    5751                 :             :    by EXP.  This does not include any offset in DECL_FIELD_BIT_OFFSET.  */
    5752                 :             : extern tree component_ref_field_offset (tree);
    5753                 :             : 
    5754                 :             : /* Describes a "special" array member for a COMPONENT_REF.  */
    5755                 :             : enum struct special_array_member
    5756                 :             :   {
    5757                 :             :     none,       /* Not a special array member.  */
    5758                 :             :     int_0,      /* Interior array member with zero elements.  */
    5759                 :             :     trail_0,    /* Trailing array member with zero elements.  */
    5760                 :             :     trail_1,    /* Trailing array member with one element.  */
    5761                 :             :     trail_n,    /* Trailing array member with two or more elements.  */
    5762                 :             :     int_n       /* Interior array member with one or more elements.  */
    5763                 :             :   };
    5764                 :             : 
    5765                 :             : /* Determines the special array member type for a COMPONENT_REF.  */
    5766                 :             : extern special_array_member component_ref_sam_type (tree);
    5767                 :             : 
    5768                 :             : /* Return the size of the member referenced by the COMPONENT_REF, using
    5769                 :             :    its initializer expression if necessary in order to determine the size
    5770                 :             :    of an initialized flexible array member.  The size might be zero for
    5771                 :             :    an object with an uninitialized flexible array member or null if it
    5772                 :             :    cannot be determined.  */
    5773                 :             : extern tree component_ref_size (tree, special_array_member * = NULL);
    5774                 :             : 
    5775                 :             : extern int tree_map_base_eq (const void *, const void *);
    5776                 :             : extern unsigned int tree_map_base_hash (const void *);
    5777                 :             : extern bool tree_map_base_marked_p (const void *);
    5778                 :             : extern void DEBUG_FUNCTION verify_type (const_tree t);
    5779                 :             : extern bool gimple_canonical_types_compatible_p (const_tree, const_tree,
    5780                 :             :                                                  bool trust_type_canonical = true);
    5781                 :             : extern bool type_with_interoperable_signedness (const_tree);
    5782                 :             : extern bitmap get_nonnull_args (const_tree);
    5783                 :             : extern int get_range_pos_neg (tree);
    5784                 :             : 
    5785                 :             : /* Return true for a valid pair of new and delete operators.  */
    5786                 :             : extern bool valid_new_delete_pair_p (tree, tree, bool * = NULL);
    5787                 :             : 
    5788                 :             : /* Return simplified tree code of type that is used for canonical type
    5789                 :             :    merging.  */
    5790                 :             : inline enum tree_code
    5791                 :   509399720 : tree_code_for_canonical_type_merging (enum tree_code code)
    5792                 :             : {
    5793                 :             :   /* By C standard, each enumerated type shall be compatible with char,
    5794                 :             :      a signed integer, or an unsigned integer.  The choice of type is
    5795                 :             :      implementation defined (in our case it depends on -fshort-enum).
    5796                 :             : 
    5797                 :             :      For this reason we make no distinction between ENUMERAL_TYPE and INTEGER
    5798                 :             :      type and compare only by their signedness and precision.  */
    5799                 :   500071568 :   if (code == ENUMERAL_TYPE)
    5800                 :             :     return INTEGER_TYPE;
    5801                 :             :   /* To allow inter-operability between languages having references and
    5802                 :             :      C, we consider reference types and pointers alike.  Note that this is
    5803                 :             :      not strictly necessary for C-Fortran 2008 interoperability because
    5804                 :             :      Fortran define C_PTR type that needs to be compatible with C pointers
    5805                 :             :      and we handle this one as ptr_type_node.  */
    5806                 :   490742624 :   if (code == REFERENCE_TYPE)
    5807                 :    33814676 :     return POINTER_TYPE;
    5808                 :             :   return code;
    5809                 :             : }
    5810                 :             : 
    5811                 :             : /* Return ture if get_alias_set care about TYPE_CANONICAL of given type.
    5812                 :             :    We don't define the types for pointers, arrays and vectors.  The reason is
    5813                 :             :    that pointers are handled specially: ptr_type_node accesses conflict with
    5814                 :             :    accesses to all other pointers.  This is done by alias.cc.
    5815                 :             :    Because alias sets of arrays and vectors are the same as types of their
    5816                 :             :    elements, we can't compute canonical type either.  Otherwise we could go
    5817                 :             :    form void *[10] to int *[10] (because they are equivalent for canonical type
    5818                 :             :    machinery) and get wrong TBAA.  */
    5819                 :             : 
    5820                 :             : inline bool
    5821                 :   286448581 : canonical_type_used_p (const_tree t)
    5822                 :             : {
    5823                 :   290294067 :   return !(POINTER_TYPE_P (t)
    5824                 :     3986524 :            || TREE_CODE (t) == ARRAY_TYPE
    5825                 :             :            || TREE_CODE (t) == VECTOR_TYPE);
    5826                 :             : }
    5827                 :             : 
    5828                 :             : /* Kinds of access to pass-by-reference arguments to functions.  */
    5829                 :             : enum access_mode
    5830                 :             : {
    5831                 :             :   access_none = 0,
    5832                 :             :   access_read_only = 1,
    5833                 :             :   access_write_only = 2,
    5834                 :             :   access_read_write = access_read_only | access_write_only,
    5835                 :             :   access_deferred = 4
    5836                 :             : };
    5837                 :             : 
    5838                 :             : #define tree_map_eq tree_map_base_eq
    5839                 :             : extern unsigned int tree_map_hash (const void *);
    5840                 :             : #define tree_map_marked_p tree_map_base_marked_p
    5841                 :             : 
    5842                 :             : #define tree_decl_map_eq tree_map_base_eq
    5843                 :             : extern unsigned int tree_decl_map_hash (const void *);
    5844                 :             : #define tree_decl_map_marked_p tree_map_base_marked_p
    5845                 :             : 
    5846                 :             : struct tree_decl_map_cache_hasher : ggc_cache_ptr_hash<tree_decl_map>
    5847                 :             : {
    5848                 :  1010814505 :   static hashval_t hash (tree_decl_map *m) { return tree_decl_map_hash (m); }
    5849                 :             :   static bool
    5850                 :  1490979055 :   equal (tree_decl_map *a, tree_decl_map *b)
    5851                 :             :   {
    5852                 :  1490979055 :     return tree_decl_map_eq (a, b);
    5853                 :             :   }
    5854                 :             : 
    5855                 :             :   static int
    5856                 :     9763575 :   keep_cache_entry (tree_decl_map *&m)
    5857                 :             :   {
    5858                 :     9763575 :     return ggc_marked_p (m->base.from);
    5859                 :             :   }
    5860                 :             : };
    5861                 :             : 
    5862                 :             : #define tree_int_map_eq tree_map_base_eq
    5863                 :             : #define tree_int_map_hash tree_map_base_hash
    5864                 :             : #define tree_int_map_marked_p tree_map_base_marked_p
    5865                 :             : 
    5866                 :             : #define tree_vec_map_eq tree_map_base_eq
    5867                 :             : #define tree_vec_map_hash tree_decl_map_hash
    5868                 :             : #define tree_vec_map_marked_p tree_map_base_marked_p
    5869                 :             : 
    5870                 :             : struct tree_vec_map_cache_hasher : ggc_cache_ptr_hash<tree_vec_map>
    5871                 :             : {
    5872                 :     5771263 :   static hashval_t hash (tree_vec_map *m) { return DECL_UID (m->base.from); }
    5873                 :             : 
    5874                 :             :   static bool
    5875                 :     6656542 :   equal (tree_vec_map *a, tree_vec_map *b)
    5876                 :             :   {
    5877                 :     6656542 :     return a->base.from == b->base.from;
    5878                 :             :   }
    5879                 :             : 
    5880                 :             :   static int
    5881                 :      999412 :   keep_cache_entry (tree_vec_map *&m)
    5882                 :             :   {
    5883                 :      999412 :     return ggc_marked_p (m->base.from);
    5884                 :             :   }
    5885                 :             : };
    5886                 :             : 
    5887                 :             : /* Hasher for tree decls.  Pointer equality is enough here, but the DECL_UID
    5888                 :             :    is a better hash than the pointer value and gives a predictable traversal
    5889                 :             :    order.  Additionally it can be used across PCH save/restore.  */
    5890                 :             : struct tree_decl_hash : ggc_ptr_hash <tree_node>
    5891                 :             : {
    5892                 :             :   static inline hashval_t hash (tree);
    5893                 :             : };
    5894                 :             : 
    5895                 :             : inline hashval_t
    5896                 :  1834467310 : tree_decl_hash::hash (tree t)
    5897                 :             : {
    5898                 :  1834467310 :   return DECL_UID (t);
    5899                 :             : }
    5900                 :             : 
    5901                 :             : /* Similarly for types.  Uses TYPE_UID as hash function.  */
    5902                 :             : struct tree_type_hash : ggc_ptr_hash <tree_node>
    5903                 :             : {
    5904                 :             :   static inline hashval_t hash (tree);
    5905                 :             : };
    5906                 :             : 
    5907                 :             : inline hashval_t
    5908                 :     1059888 : tree_type_hash::hash (tree t)
    5909                 :             : {
    5910                 :     1059888 :   return TYPE_UID (t);
    5911                 :             : }
    5912                 :             : 
    5913                 :             : /* Hash for SSA_NAMEs in the same function.  Pointer equality is enough
    5914                 :             :    here, but the SSA_NAME_VERSION is a better hash than the pointer
    5915                 :             :    value and gives a predictable traversal order.  */
    5916                 :             : struct tree_ssa_name_hash : ggc_ptr_hash <tree_node>
    5917                 :             : {
    5918                 :             :   static inline hashval_t hash (tree);
    5919                 :             : };
    5920                 :             : 
    5921                 :             : inline hashval_t
    5922                 :    83872450 : tree_ssa_name_hash::hash (tree t)
    5923                 :             : {
    5924                 :    83872450 :   return SSA_NAME_VERSION (t);
    5925                 :             : }
    5926                 :             : 
    5927                 :             : /* Hasher for general trees, based on their TREE_HASH.  */
    5928                 :             : struct tree_hash : ggc_ptr_hash <tree_node>
    5929                 :             : {
    5930                 :             :   static hashval_t hash (tree);
    5931                 :             : };
    5932                 :             : 
    5933                 :             : inline hashval_t
    5934                 :       60464 : tree_hash::hash (tree t)
    5935                 :             : {
    5936                 :       60464 :   return TREE_HASH (t);
    5937                 :             : }
    5938                 :             : 
    5939                 :             : /* A hash_map of two trees for use with GTY((cache)).  Garbage collection for
    5940                 :             :    such a map will not mark keys, and will mark values if the key is already
    5941                 :             :    marked.  */
    5942                 :             : struct tree_cache_traits
    5943                 :             :   : simple_cache_map_traits<default_hash_traits<tree>, tree> { };
    5944                 :             : typedef hash_map<tree,tree,tree_cache_traits> tree_cache_map;
    5945                 :             : 
    5946                 :             : /* Similarly, but use DECL_UID as hash function rather than pointer hashing.
    5947                 :             :    This is for hash_maps from decls to trees that need to work across PCH.  */
    5948                 :             : struct decl_tree_cache_traits
    5949                 :             :   : simple_cache_map_traits<tree_decl_hash, tree> { };
    5950                 :             : typedef hash_map<tree,tree,decl_tree_cache_traits> decl_tree_cache_map;
    5951                 :             : 
    5952                 :             : /* Similarly, but use TYPE_UID as hash function rather than pointer hashing.
    5953                 :             :    This is for hash_maps from types to trees that need to work across PCH.  */
    5954                 :             : struct type_tree_cache_traits
    5955                 :             :   : simple_cache_map_traits<tree_type_hash, tree> { };
    5956                 :             : typedef hash_map<tree,tree,type_tree_cache_traits> type_tree_cache_map;
    5957                 :             : 
    5958                 :             : /* Similarly to decl_tree_cache_map, but without caching.  */
    5959                 :             : struct decl_tree_traits
    5960                 :             :   : simple_hashmap_traits<tree_decl_hash, tree> { };
    5961                 :             : typedef hash_map<tree,tree,decl_tree_traits> decl_tree_map;
    5962                 :             : 
    5963                 :             : /* Initialize the abstract argument list iterator object ITER with the
    5964                 :             :    arguments from CALL_EXPR node EXP.  */
    5965                 :             : inline void
    5966                 :   610641442 : init_call_expr_arg_iterator (tree exp, call_expr_arg_iterator *iter)
    5967                 :             : {
    5968                 :   610641442 :   iter->t = exp;
    5969                 :   610641442 :   iter->n = call_expr_nargs (exp);
    5970                 :   610641442 :   iter->i = 0;
    5971                 :   610641442 : }
    5972                 :             : 
    5973                 :             : inline void
    5974                 :     1971524 : init_const_call_expr_arg_iterator (const_tree exp, const_call_expr_arg_iterator *iter)
    5975                 :             : {
    5976                 :     1971524 :   iter->t = exp;
    5977                 :     1971524 :   iter->n = call_expr_nargs (exp);
    5978                 :     1971524 :   iter->i = 0;
    5979                 :     1971524 : }
    5980                 :             : 
    5981                 :             : /* Return the next argument from abstract argument list iterator object ITER,
    5982                 :             :    and advance its state.  Return NULL_TREE if there are no more arguments.  */
    5983                 :             : inline tree
    5984                 :   798132591 : next_call_expr_arg (call_expr_arg_iterator *iter)
    5985                 :             : {
    5986                 :   798132591 :   tree result;
    5987                 :   798132591 :   if (iter->i >= iter->n)
    5988                 :             :     return NULL_TREE;
    5989                 :   213985522 :   result = CALL_EXPR_ARG (iter->t, iter->i);
    5990                 :   213985522 :   iter->i++;
    5991                 :   213985522 :   return result;
    5992                 :             : }
    5993                 :             : 
    5994                 :             : inline const_tree
    5995                 :     3421135 : next_const_call_expr_arg (const_call_expr_arg_iterator *iter)
    5996                 :             : {
    5997                 :     3421135 :   const_tree result;
    5998                 :     3421135 :   if (iter->i >= iter->n)
    5999                 :             :     return NULL_TREE;
    6000                 :     2847462 :   result = CALL_EXPR_ARG (iter->t, iter->i);
    6001                 :     2847462 :   iter->i++;
    6002                 :     2847462 :   return result;
    6003                 :             : }
    6004                 :             : 
    6005                 :             : /* Initialize the abstract argument list iterator object ITER, then advance
    6006                 :             :    past and return the first argument.  Useful in for expressions, e.g.
    6007                 :             :      for (arg = first_call_expr_arg (exp, &iter); arg;
    6008                 :             :           arg = next_call_expr_arg (&iter))   */
    6009                 :             : inline tree
    6010                 :   584147318 : first_call_expr_arg (tree exp, call_expr_arg_iterator *iter)
    6011                 :             : {
    6012                 :   584147318 :   init_call_expr_arg_iterator (exp, iter);
    6013                 :   584147318 :   return next_call_expr_arg (iter);
    6014                 :             : }
    6015                 :             : 
    6016                 :             : inline const_tree
    6017                 :      894977 : first_const_call_expr_arg (const_tree exp, const_call_expr_arg_iterator *iter)
    6018                 :             : {
    6019                 :      894977 :   init_const_call_expr_arg_iterator (exp, iter);
    6020                 :      894977 :   return next_const_call_expr_arg (iter);
    6021                 :             : }
    6022                 :             : 
    6023                 :             : /* Test whether there are more arguments in abstract argument list iterator
    6024                 :             :    ITER, without changing its state.  */
    6025                 :             : inline bool
    6026                 :    14015515 : more_call_expr_args_p (const call_expr_arg_iterator *iter)
    6027                 :             : {
    6028                 :    14015515 :   return (iter->i < iter->n);
    6029                 :             : }
    6030                 :             : 
    6031                 :             : /* Iterate through each argument ARG of CALL_EXPR CALL, using variable ITER
    6032                 :             :    (of type call_expr_arg_iterator) to hold the iteration state.  */
    6033                 :             : #define FOR_EACH_CALL_EXPR_ARG(arg, iter, call)                 \
    6034                 :             :   for ((arg) = first_call_expr_arg ((call), &(iter)); (arg);        \
    6035                 :             :        (arg) = next_call_expr_arg (&(iter)))
    6036                 :             : 
    6037                 :             : #define FOR_EACH_CONST_CALL_EXPR_ARG(arg, iter, call)                   \
    6038                 :             :   for ((arg) = first_const_call_expr_arg ((call), &(iter)); (arg);  \
    6039                 :             :        (arg) = next_const_call_expr_arg (&(iter)))
    6040                 :             : 
    6041                 :             : /* Return true if tree node T is a language-specific node.  */
    6042                 :             : inline bool
    6043                 :   208576332 : is_lang_specific (const_tree t)
    6044                 :             : {
    6045                 :   208576332 :   return TREE_CODE (t) == LANG_TYPE || TREE_CODE (t) >= NUM_TREE_CODES;
    6046                 :             : }
    6047                 :             : 
    6048                 :             : /* Valid builtin number.  */
    6049                 :             : #define BUILTIN_VALID_P(FNCODE) \
    6050                 :             :   (IN_RANGE ((int)FNCODE, ((int)BUILT_IN_NONE) + 1, ((int) END_BUILTINS) - 1))
    6051                 :             : 
    6052                 :             : /* Obtain a pointer to the identifier string holding the asm name for
    6053                 :             :    BUILTIN, a BUILT_IN code.  This is handy if the target
    6054                 :             :    mangles/overrides the function name that implements the
    6055                 :             :    builtin.  */
    6056                 :             : #define BUILTIN_ASM_NAME_PTR(BUILTIN) \
    6057                 :             :   (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (builtin_decl_explicit (BUILTIN))))
    6058                 :             : 
    6059                 :             : /* Return the tree node for an explicit standard builtin function or NULL.  */
    6060                 :             : inline tree
    6061                 :   279225739 : builtin_decl_explicit (enum built_in_function fncode)
    6062                 :             : {
    6063                 :   263960983 :   gcc_checking_assert (BUILTIN_VALID_P (fncode));
    6064                 :             : 
    6065                 :   263847313 :   return builtin_info[(size_t)fncode].decl;
    6066                 :             : }
    6067                 :             : 
    6068                 :             : /* Return the tree node for an implicit builtin function or NULL.  */
    6069                 :             : inline tree
    6070                 :      812547 : builtin_decl_implicit (enum built_in_function fncode)
    6071                 :             : {
    6072                 :      812395 :   size_t uns_fncode = (size_t)fncode;
    6073                 :      324832 :   gcc_checking_assert (BUILTIN_VALID_P (fncode));
    6074                 :             : 
    6075                 :      812547 :   if (!builtin_info[uns_fncode].implicit_p)
    6076                 :             :     return NULL_TREE;
    6077                 :             : 
    6078                 :      811122 :   return builtin_info[uns_fncode].decl;
    6079                 :             : }
    6080                 :             : 
    6081                 :             : /* For BUILTIN_UNREACHABLE, use one of these or
    6082                 :             :    gimple_build_builtin_unreachable instead of one of the above.  */
    6083                 :             : extern tree builtin_decl_unreachable ();
    6084                 :             : extern tree build_builtin_unreachable (location_t);
    6085                 :             : 
    6086                 :             : /* Set explicit builtin function nodes and whether it is an implicit
    6087                 :             :    function.  */
    6088                 :             : 
    6089                 :             : inline void
    6090                 :   329480967 : set_builtin_decl (enum built_in_function fncode, tree decl, bool implicit_p)
    6091                 :             : {
    6092                 :   329480967 :   size_t ufncode = (size_t)fncode;
    6093                 :             : 
    6094                 :   329480967 :   gcc_checking_assert (BUILTIN_VALID_P (fncode)
    6095                 :             :                        && (decl != NULL_TREE || !implicit_p));
    6096                 :             : 
    6097                 :   329480967 :   builtin_info[ufncode].decl = decl;
    6098                 :   329480967 :   builtin_info[ufncode].implicit_p = implicit_p;
    6099                 :   329480967 :   builtin_info[ufncode].declared_p = false;
    6100                 :   329480967 : }
    6101                 :             : 
    6102                 :             : /* Set the implicit flag for a builtin function.  */
    6103                 :             : 
    6104                 :             : inline void
    6105                 :     1233605 : set_builtin_decl_implicit_p (enum built_in_function fncode, bool implicit_p)
    6106                 :             : {
    6107                 :     1233605 :   size_t uns_fncode = (size_t)fncode;
    6108                 :             : 
    6109                 :     1233605 :   gcc_checking_assert (BUILTIN_VALID_P (fncode)
    6110                 :             :                        && builtin_info[uns_fncode].decl != NULL_TREE);
    6111                 :             : 
    6112                 :     1233605 :   builtin_info[uns_fncode].implicit_p = implicit_p;
    6113                 :     1233605 : }
    6114                 :             : 
    6115                 :             : /* Set the declared flag for a builtin function.  */
    6116                 :             : 
    6117                 :             : inline void
    6118                 :     6786654 : set_builtin_decl_declared_p (enum built_in_function fncode, bool declared_p)
    6119                 :             : {
    6120                 :     6786654 :   size_t uns_fncode = (size_t)fncode;
    6121                 :             : 
    6122                 :     6786654 :   gcc_checking_assert (BUILTIN_VALID_P (fncode)
    6123                 :             :                        && builtin_info[uns_fncode].decl != NULL_TREE);
    6124                 :             : 
    6125                 :     6786654 :   builtin_info[uns_fncode].declared_p = declared_p;
    6126                 :     6786654 : }
    6127                 :             : 
    6128                 :             : /* Return whether the standard builtin function can be used as an explicit
    6129                 :             :    function.  */
    6130                 :             : 
    6131                 :             : inline bool
    6132                 :    19237837 : builtin_decl_explicit_p (enum built_in_function fncode)
    6133                 :             : {
    6134                 :    19237837 :   gcc_checking_assert (BUILTIN_VALID_P (fncode));
    6135                 :    16922986 :   return (builtin_info[(size_t)fncode].decl != NULL_TREE);
    6136                 :             : }
    6137                 :             : 
    6138                 :             : /* Return whether the standard builtin function can be used implicitly.  */
    6139                 :             : 
    6140                 :             : inline bool
    6141                 :      161505 : builtin_decl_implicit_p (enum built_in_function fncode)
    6142                 :             : {
    6143                 :      161505 :   size_t uns_fncode = (size_t)fncode;
    6144                 :             : 
    6145                 :      161505 :   gcc_checking_assert (BUILTIN_VALID_P (fncode));
    6146                 :      161505 :   return (builtin_info[uns_fncode].decl != NULL_TREE
    6147                 :      161499 :           && builtin_info[uns_fncode].implicit_p);
    6148                 :             : }
    6149                 :             : 
    6150                 :             : /* Return whether the standard builtin function was declared.  */
    6151                 :             : 
    6152                 :             : inline bool
    6153                 :     3672981 : builtin_decl_declared_p (enum built_in_function fncode)
    6154                 :             : {
    6155                 :     3672981 :   size_t uns_fncode = (size_t)fncode;
    6156                 :             : 
    6157                 :     3672981 :   gcc_checking_assert (BUILTIN_VALID_P (fncode));
    6158                 :     3672981 :   return (builtin_info[uns_fncode].decl != NULL_TREE
    6159                 :     3672981 :           && builtin_info[uns_fncode].declared_p);
    6160                 :             : }
    6161                 :             : 
    6162                 :             : /* Determine if the function identified by FNDECL is one that
    6163                 :             :    makes sense to match by name, for those places where we detect
    6164                 :             :    "magic" functions by name.
    6165                 :             : 
    6166                 :             :    Return true if FNDECL has a name and is an extern fndecl at file scope.
    6167                 :             :    FNDECL must be a non-NULL decl.
    6168                 :             : 
    6169                 :             :    Avoid using this, as it's generally better to use attributes rather
    6170                 :             :    than to check for functions by name.  */
    6171                 :             : 
    6172                 :             : inline bool
    6173                 :  4005881658 : maybe_special_function_p (const_tree fndecl)
    6174                 :             : {
    6175                 :  4005881658 :   tree name_decl = DECL_NAME (fndecl);
    6176                 :  4005881658 :   if (name_decl
    6177                 :             :       /* Exclude functions not at the file scope, or not `extern',
    6178                 :             :          since they are not the magic functions we would otherwise
    6179                 :             :          think they are.  */
    6180                 :  4005881658 :       && (DECL_CONTEXT (fndecl) == NULL_TREE
    6181                 :  2453811992 :           || TREE_CODE (DECL_CONTEXT (fndecl)) == TRANSLATION_UNIT_DECL)
    6182                 :  6953416040 :       && TREE_PUBLIC (fndecl))
    6183                 :  2799442259 :     return true;
    6184                 :             :   return false;
    6185                 :             : }
    6186                 :             : 
    6187                 :             : /* Return true if T (assumed to be a DECL) is a global variable.
    6188                 :             :    A variable is considered global if its storage is not automatic.  */
    6189                 :             : 
    6190                 :             : inline bool
    6191                 :  2312417502 : is_global_var (const_tree t)
    6192                 :             : {
    6193                 :  2312417502 :   return (TREE_STATIC (t) || DECL_EXTERNAL (t));
    6194                 :             : }
    6195                 :             : 
    6196                 :             : /* Return true if VAR may be aliased.  A variable is considered as
    6197                 :             :    maybe aliased if it has its address taken by the local TU
    6198                 :             :    or possibly by another TU and might be modified through a pointer.  */
    6199                 :             : 
    6200                 :             : inline bool
    6201                 :   639302156 : may_be_aliased (const_tree var)
    6202                 :             : {
    6203                 :   639302156 :   return (TREE_CODE (var) != CONST_DECL
    6204                 :   638779982 :           && (TREE_PUBLIC (var)
    6205                 :   615280101 :               || DECL_EXTERNAL (var)
    6206                 :   615280101 :               || TREE_ADDRESSABLE (var))
    6207                 :   843617424 :           && !((TREE_STATIC (var) || TREE_PUBLIC (var) || DECL_EXTERNAL (var))
    6208                 :    31833476 :                && (TREE_READONLY (var)
    6209                 :    26863629 :                    || (TREE_CODE (var) == VAR_DECL
    6210                 :    26043454 :                        && DECL_NONALIASED (var)))));
    6211                 :             : }
    6212                 :             : 
    6213                 :             : /* Return pointer to optimization flags of FNDECL.  */
    6214                 :             : inline struct cl_optimization *
    6215                 :  2622139848 : opts_for_fn (const_tree fndecl)
    6216                 :             : {
    6217                 :  2622139848 :   tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl);
    6218                 :  2622139848 :   if (fn_opts == NULL_TREE)
    6219                 :  2369231096 :     fn_opts = optimization_default_node;
    6220                 :  2622139848 :   return TREE_OPTIMIZATION (fn_opts);
    6221                 :             : }
    6222                 :             : 
    6223                 :             : /* Return pointer to target flags of FNDECL.  */
    6224                 :             : inline cl_target_option *
    6225                 :     2827155 : target_opts_for_fn (const_tree fndecl)
    6226                 :             : {
    6227                 :     2827155 :   tree fn_opts = DECL_FUNCTION_SPECIFIC_TARGET (fndecl);
    6228                 :     2827155 :   if (fn_opts == NULL_TREE)
    6229                 :     1582020 :     fn_opts = target_option_default_node;
    6230                 :     4409175 :   return fn_opts == NULL_TREE ? NULL : TREE_TARGET_OPTION (fn_opts);
    6231                 :             : }
    6232                 :             : 
    6233                 :             : /* opt flag for function FNDECL, e.g. opts_for_fn (fndecl, optimize) is
    6234                 :             :    the optimization level of function fndecl.  */
    6235                 :             : #define opt_for_fn(fndecl, opt) (opts_for_fn (fndecl)->x_##opt)
    6236                 :             : 
    6237                 :             : /* For anonymous aggregate types, we need some sort of name to
    6238                 :             :    hold on to.  In practice, this should not appear, but it should
    6239                 :             :    not be harmful if it does.  Identifiers returned will be
    6240                 :             :    IDENTIFIER_ANON_P.  */
    6241                 :             : extern tree make_anon_name ();
    6242                 :             : 
    6243                 :             : /* The tree and const_tree overload templates.   */
    6244                 :             : namespace wi
    6245                 :             : {
    6246                 :             :   class unextended_tree
    6247                 :             :   {
    6248                 :             :   private:
    6249                 :             :     const_tree m_t;
    6250                 :             : 
    6251                 :             :   public:
    6252                 :             :     unextended_tree () {}
    6253                 :   916295511 :     unextended_tree (const_tree t) : m_t (t) {}
    6254                 :             : 
    6255                 :             :     unsigned int get_precision () const;
    6256                 :             :     const HOST_WIDE_INT *get_val () const;
    6257                 :             :     unsigned int get_len () const;
    6258                 :             :     const_tree get_tree () const { return m_t; }
    6259                 :             :   };
    6260                 :             : 
    6261                 :             :   template <>
    6262                 :             :   struct int_traits <unextended_tree>
    6263                 :             :   {
    6264                 :             :     static const enum precision_type precision_type = VAR_PRECISION;
    6265                 :             :     static const bool host_dependent_precision = false;
    6266                 :             :     static const bool is_sign_extended = false;
    6267                 :             :     static const bool needs_write_val_arg = false;
    6268                 :             :   };
    6269                 :             : 
    6270                 :             :   template <int N>
    6271                 :             :   class extended_tree
    6272                 :             :   {
    6273                 :             :   private:
    6274                 :             :     const_tree m_t;
    6275                 :             : 
    6276                 :             :   public:
    6277                 :             :     extended_tree () {}
    6278                 :             :     extended_tree (const_tree);
    6279                 :             : 
    6280                 :             :     unsigned int get_precision () const;
    6281                 :             :     const HOST_WIDE_INT *get_val () const;
    6282                 :             :     unsigned int get_len () const;
    6283                 :             :     const_tree get_tree () const { return m_t; }
    6284                 :             :   };
    6285                 :             : 
    6286                 :             :   template <int N>
    6287                 :             :   struct int_traits <extended_tree <N> >
    6288                 :             :   {
    6289                 :             :     static const enum precision_type precision_type
    6290                 :             :       = N == ADDR_MAX_PRECISION ? INL_CONST_PRECISION : CONST_PRECISION;
    6291                 :             :     static const bool host_dependent_precision = false;
    6292                 :             :     static const bool is_sign_extended = true;
    6293                 :             :     static const bool needs_write_val_arg = false;
    6294                 :             :     static const unsigned int precision = N;
    6295                 :             :   };
    6296                 :             : 
    6297                 :             :   typedef extended_tree <WIDEST_INT_MAX_PRECISION> widest_extended_tree;
    6298                 :             :   typedef extended_tree <ADDR_MAX_PRECISION> offset_extended_tree;
    6299                 :             : 
    6300                 :             :   typedef const generic_wide_int <widest_extended_tree> tree_to_widest_ref;
    6301                 :             :   typedef const generic_wide_int <offset_extended_tree> tree_to_offset_ref;
    6302                 :             :   typedef const generic_wide_int<wide_int_ref_storage<false, false> >
    6303                 :             :     tree_to_wide_ref;
    6304                 :             : 
    6305                 :             :   tree_to_widest_ref to_widest (const_tree);
    6306                 :             :   tree_to_offset_ref to_offset (const_tree);
    6307                 :             :   tree_to_wide_ref to_wide (const_tree);
    6308                 :             :   wide_int to_wide (const_tree, unsigned int);
    6309                 :             : 
    6310                 :             :   typedef const poly_int <NUM_POLY_INT_COEFFS,
    6311                 :             :                           generic_wide_int <widest_extended_tree> >
    6312                 :             :     tree_to_poly_widest_ref;
    6313                 :             :   typedef const poly_int <NUM_POLY_INT_COEFFS,
    6314                 :             :                           generic_wide_int <offset_extended_tree> >
    6315                 :             :     tree_to_poly_offset_ref;
    6316                 :             :   typedef const poly_int <NUM_POLY_INT_COEFFS,
    6317                 :             :                           generic_wide_int <unextended_tree> >
    6318                 :             :     tree_to_poly_wide_ref;
    6319                 :             : 
    6320                 :             :   tree_to_poly_widest_ref to_poly_widest (const_tree);
    6321                 :             :   tree_to_poly_offset_ref to_poly_offset (const_tree);
    6322                 :             :   tree_to_poly_wide_ref to_poly_wide (const_tree);
    6323                 :             : 
    6324                 :             :   template <int N>
    6325                 :             :   struct ints_for <generic_wide_int <extended_tree <N> >, INL_CONST_PRECISION>
    6326                 :             :   {
    6327                 :             :     typedef generic_wide_int <extended_tree <N> > extended;
    6328                 :             :     static extended zero (const extended &);
    6329                 :             :   };
    6330                 :             : 
    6331                 :             :   template <int N>
    6332                 :             :   struct ints_for <generic_wide_int <extended_tree <N> >, CONST_PRECISION>
    6333                 :             :   {
    6334                 :             :     typedef generic_wide_int <extended_tree <N> > extended;
    6335                 :             :     static extended zero (const extended &);
    6336                 :             :   };
    6337                 :             : 
    6338                 :             :   template <>
    6339                 :             :   struct ints_for <generic_wide_int <unextended_tree>, VAR_PRECISION>
    6340                 :             :   {
    6341                 :             :     typedef generic_wide_int <unextended_tree> unextended;
    6342                 :             :     static unextended zero (const unextended &);
    6343                 :             :   };
    6344                 :             : }
    6345                 :             : 
    6346                 :             : /* Used to convert a tree to a widest2_int like this:
    6347                 :             :    widest2_int foo = widest2_int_cst (some_tree).  */
    6348                 :             : typedef generic_wide_int <wi::extended_tree <WIDEST_INT_MAX_PRECISION * 2> >
    6349                 :             :   widest2_int_cst;
    6350                 :             : 
    6351                 :             : /* Refer to INTEGER_CST T as though it were a widest_int.
    6352                 :             : 
    6353                 :             :    This function gives T's actual numerical value, influenced by the
    6354                 :             :    signedness of its type.  For example, a signed byte with just the
    6355                 :             :    top bit set would be -128 while an unsigned byte with the same
    6356                 :             :    bit pattern would be 128.
    6357                 :             : 
    6358                 :             :    This is the right choice when operating on groups of INTEGER_CSTs
    6359                 :             :    that might have different signedness or precision.  It is also the
    6360                 :             :    right choice in code that specifically needs an approximation of
    6361                 :             :    infinite-precision arithmetic instead of normal modulo arithmetic.
    6362                 :             : 
    6363                 :             :    The approximation of infinite precision is good enough for realistic
    6364                 :             :    numbers of additions and subtractions of INTEGER_CSTs (where
    6365                 :             :    "realistic" includes any number less than 1 << 31) but it cannot
    6366                 :             :    represent the result of multiplying the two largest supported
    6367                 :             :    INTEGER_CSTs.  The overflow-checking form of wi::mul provides a way
    6368                 :             :    of multiplying two arbitrary INTEGER_CSTs and checking that the
    6369                 :             :    result is representable as a widest_int.
    6370                 :             : 
    6371                 :             :    Note that any overflow checking done on these values is relative to
    6372                 :             :    the range of widest_int rather than the range of a TREE_TYPE.
    6373                 :             : 
    6374                 :             :    Calling this function should have no overhead in release builds,
    6375                 :             :    so it is OK to call it several times for the same tree.  If it is
    6376                 :             :    useful for readability reasons to reduce the number of calls,
    6377                 :             :    it is more efficient to use:
    6378                 :             : 
    6379                 :             :      wi::tree_to_widest_ref wt = wi::to_widest (t);
    6380                 :             : 
    6381                 :             :    instead of:
    6382                 :             : 
    6383                 :             :      widest_int wt = wi::to_widest (t).  */
    6384                 :             : 
    6385                 :             : inline wi::tree_to_widest_ref
    6386                 :  3403699162 : wi::to_widest (const_tree t)
    6387                 :             : {
    6388                 :  9989850274 :   return t;
    6389                 :             : }
    6390                 :             : 
    6391                 :             : /* Refer to INTEGER_CST T as though it were an offset_int.
    6392                 :             : 
    6393                 :             :    This function is an optimisation of wi::to_widest for cases
    6394                 :             :    in which T is known to be a bit or byte count in the range
    6395                 :             :    (-(2 ^ (N + BITS_PER_UNIT)), 2 ^ (N + BITS_PER_UNIT)), where N is
    6396                 :             :    the target's address size in bits.
    6397                 :             : 
    6398                 :             :    This is the right choice when operating on bit or byte counts as
    6399                 :             :    untyped numbers rather than M-bit values.  The wi::to_widest comments
    6400                 :             :    about addition, subtraction and multiplication apply here: sequences
    6401                 :             :    of 1 << 31 additions and subtractions do not induce overflow, but
    6402                 :             :    multiplying the largest sizes might.  Again,
    6403                 :             : 
    6404                 :             :      wi::tree_to_offset_ref wt = wi::to_offset (t);
    6405                 :             : 
    6406                 :             :    is more efficient than:
    6407                 :             : 
    6408                 :             :      offset_int wt = wi::to_offset (t).  */
    6409                 :             : 
    6410                 :             : inline wi::tree_to_offset_ref
    6411                 :  3366644422 : wi::to_offset (const_tree t)
    6412                 :             : {
    6413                 :  3216401765 :   return t;
    6414                 :             : }
    6415                 :             : 
    6416                 :             : /* Refer to INTEGER_CST T as though it were a wide_int.
    6417                 :             : 
    6418                 :             :    In contrast to the approximation of infinite-precision numbers given
    6419                 :             :    by wi::to_widest and wi::to_offset, this function treats T as a
    6420                 :             :    signless collection of N bits, where N is the precision of T's type.
    6421                 :             :    As with machine registers, signedness is determined by the operation
    6422                 :             :    rather than the operands; for example, there is a distinction between
    6423                 :             :    signed and unsigned division.
    6424                 :             : 
    6425                 :             :    This is the right choice when operating on values with the same type
    6426                 :             :    using normal modulo arithmetic.  The overflow-checking forms of things
    6427                 :             :    like wi::add check whether the result can be represented in T's type.
    6428                 :             : 
    6429                 :             :    Calling this function should have no overhead in release builds,
    6430                 :             :    so it is OK to call it several times for the same tree.  If it is
    6431                 :             :    useful for readability reasons to reduce the number of calls,
    6432                 :             :    it is more efficient to use:
    6433                 :             : 
    6434                 :             :      wi::tree_to_wide_ref wt = wi::to_wide (t);
    6435                 :             : 
    6436                 :             :    instead of:
    6437                 :             : 
    6438                 :             :      wide_int wt = wi::to_wide (t).  */
    6439                 :             : 
    6440                 :             : inline wi::tree_to_wide_ref
    6441                 : 12296651596 : wi::to_wide (const_tree t)
    6442                 :             : {
    6443                 : 12296651596 :   return wi::storage_ref (&TREE_INT_CST_ELT (t, 0), TREE_INT_CST_NUNITS (t),
    6444                 : 12296651596 :                           TYPE_PRECISION (TREE_TYPE (t)));
    6445                 :             : }
    6446                 :             : 
    6447                 :             : /* Convert INTEGER_CST T to a wide_int of precision PREC, extending or
    6448                 :             :    truncating as necessary.  When extending, use sign extension if T's
    6449                 :             :    type is signed and zero extension if T's type is unsigned.  */
    6450                 :             : 
    6451                 :             : inline wide_int
    6452                 :  1357815136 : wi::to_wide (const_tree t, unsigned int prec)
    6453                 :             : {
    6454                 :  1357815136 :   return wide_int::from (wi::to_wide (t), prec, TYPE_SIGN (TREE_TYPE (t)));
    6455                 :             : }
    6456                 :             : 
    6457                 :             : template <int N>
    6458                 : 22225222455 : inline wi::extended_tree <N>::extended_tree (const_tree t)
    6459                 : 22225222455 :   : m_t (t)
    6460                 :             : {
    6461                 : 22225222455 :   gcc_checking_assert (TYPE_PRECISION (TREE_TYPE (t)) <= N);
    6462                 : 22225222455 : }
    6463                 :             : 
    6464                 :             : template <int N>
    6465                 :             : inline unsigned int
    6466                 :             : wi::extended_tree <N>::get_precision () const
    6467                 :             : {
    6468                 :             :   return N;
    6469                 :             : }
    6470                 :             : 
    6471                 :             : template <int N>
    6472                 :             : inline const HOST_WIDE_INT *
    6473                 : 22311414275 : wi::extended_tree <N>::get_val () const
    6474                 :             : {
    6475                 : 22311414275 :   return &TREE_INT_CST_ELT (m_t, 0);
    6476                 :             : }
    6477                 :             : 
    6478                 :             : template <int N>
    6479                 :             : inline unsigned int
    6480                 : 22299597193 : wi::extended_tree <N>::get_len () const
    6481                 :             : {
    6482                 :             :   if (N == ADDR_MAX_PRECISION)
    6483                 :             :     {
    6484                 :             :       /* to_offset can only be applied to trees that are offset_int-sized
    6485                 :             :          or smaller.  EXT_LEN is correct if it fits, otherwise the constant
    6486                 :             :          must be exactly the precision of offset_int and so LEN is correct.  */
    6487                 :  9724971098 :       unsigned int ext_len = TREE_INT_CST_EXT_NUNITS (m_t);
    6488                 :  9724971098 :       if (ext_len <= OFFSET_INT_ELTS)
    6489                 :             :         return ext_len;
    6490                 :         397 :       return TREE_INT_CST_NUNITS (m_t);
    6491                 :             :     }
    6492                 :             :   else if (N >= WIDEST_INT_MAX_PRECISION)
    6493                 : 12574626095 :     return TREE_INT_CST_EXT_NUNITS (m_t);
    6494                 :             :   else
    6495                 :             :     /* This class is designed to be used for specific output precisions
    6496                 :             :        and needs to be as fast as possible, so there is no fallback for
    6497                 :             :        other casees.  */
    6498                 :             :     gcc_unreachable ();
    6499                 :             : }
    6500                 :             : 
    6501                 :             : inline unsigned int
    6502                 :  1889522405 : wi::unextended_tree::get_precision () const
    6503                 :             : {
    6504                 :  1889522405 :   return TYPE_PRECISION (TREE_TYPE (m_t));
    6505                 :             : }
    6506                 :             : 
    6507                 :             : inline const HOST_WIDE_INT *
    6508                 :   948358669 : wi::unextended_tree::get_val () const
    6509                 :             : {
    6510                 :   948358669 :   return &TREE_INT_CST_ELT (m_t, 0);
    6511                 :             : }
    6512                 :             : 
    6513                 :             : inline unsigned int
    6514                 :   941650609 : wi::unextended_tree::get_len () const
    6515                 :             : {
    6516                 :   941650609 :   return TREE_INT_CST_NUNITS (m_t);
    6517                 :             : }
    6518                 :             : 
    6519                 :             : /* Return the value of a POLY_INT_CST in its native precision.  */
    6520                 :             : 
    6521                 :             : inline wi::tree_to_poly_wide_ref
    6522                 :           0 : poly_int_cst_value (const_tree x)
    6523                 :             : {
    6524                 :           0 :   poly_int <NUM_POLY_INT_COEFFS, generic_wide_int <wi::unextended_tree> > res;
    6525                 :           0 :   for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
    6526                 :           0 :     res.coeffs[i] = POLY_INT_CST_COEFF (x, i);
    6527                 :           0 :   return res;
    6528                 :             : }
    6529                 :             : 
    6530                 :             : /* Access INTEGER_CST or POLY_INT_CST tree T as if it were a
    6531                 :             :    poly_widest_int.  See wi::to_widest for more details.  */
    6532                 :             : 
    6533                 :             : inline wi::tree_to_poly_widest_ref
    6534                 :    56259388 : wi::to_poly_widest (const_tree t)
    6535                 :             : {
    6536                 :    37692196 :   if (POLY_INT_CST_P (t))
    6537                 :             :     {
    6538                 :             :       poly_int <NUM_POLY_INT_COEFFS,
    6539                 :             :                 generic_wide_int <widest_extended_tree> > res;
    6540                 :             :       for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
    6541                 :             :         res.coeffs[i] = POLY_INT_CST_COEFF (t, i);
    6542                 :             :       return res;
    6543                 :             :     }
    6544                 :    37692049 :   return t;
    6545                 :             : }
    6546                 :             : 
    6547                 :             : /* Access INTEGER_CST or POLY_INT_CST tree T as if it were a
    6548                 :             :    poly_offset_int.  See wi::to_offset for more details.  */
    6549                 :             : 
    6550                 :             : inline wi::tree_to_poly_offset_ref
    6551                 :  6336161808 : wi::to_poly_offset (const_tree t)
    6552                 :             : {
    6553                 :  1306574120 :   if (POLY_INT_CST_P (t))
    6554                 :             :     {
    6555                 :             :       poly_int <NUM_POLY_INT_COEFFS,
    6556                 :             :                 generic_wide_int <offset_extended_tree> > res;
    6557                 :             :       for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
    6558                 :             :         res.coeffs[i] = POLY_INT_CST_COEFF (t, i);
    6559                 :             :       return res;
    6560                 :             :     }
    6561                 :  5669109443 :   return t;
    6562                 :             : }
    6563                 :             : 
    6564                 :             : /* Access INTEGER_CST or POLY_INT_CST tree T as if it were a
    6565                 :             :    poly_wide_int.  See wi::to_wide for more details.  */
    6566                 :             : 
    6567                 :             : inline wi::tree_to_poly_wide_ref
    6568                 :   916295511 : wi::to_poly_wide (const_tree t)
    6569                 :             : {
    6570                 :   916295511 :   if (POLY_INT_CST_P (t))
    6571                 :             :     return poly_int_cst_value (t);
    6572                 :   916295511 :   return t;
    6573                 :             : }
    6574                 :             : 
    6575                 :             : template <int N>
    6576                 :             : inline generic_wide_int <wi::extended_tree <N> >
    6577                 :             : wi::ints_for <generic_wide_int <wi::extended_tree <N> >,
    6578                 :             :               wi::INL_CONST_PRECISION>::zero (const extended &x)
    6579                 :             : {
    6580                 :             :   return build_zero_cst (TREE_TYPE (x.get_tree ()));
    6581                 :             : }
    6582                 :             : 
    6583                 :             : template <int N>
    6584                 :             : inline generic_wide_int <wi::extended_tree <N> >
    6585                 :             : wi::ints_for <generic_wide_int <wi::extended_tree <N> >,
    6586                 :             :               wi::CONST_PRECISION>::zero (const extended &x)
    6587                 :             : {
    6588                 :             :   return build_zero_cst (TREE_TYPE (x.get_tree ()));
    6589                 :             : }
    6590                 :             : 
    6591                 :             : inline generic_wide_int <wi::unextended_tree>
    6592                 :             : wi::ints_for <generic_wide_int <wi::unextended_tree>,
    6593                 :             :               wi::VAR_PRECISION>::zero (const unextended &x)
    6594                 :             : {
    6595                 :             :   return build_zero_cst (TREE_TYPE (x.get_tree ()));
    6596                 :             : }
    6597                 :             : 
    6598                 :             : namespace wi
    6599                 :             : {
    6600                 :             :   template <typename T>
    6601                 :             :   bool fits_to_boolean_p (const T &x, const_tree);
    6602                 :             : 
    6603                 :             :   template <typename T>
    6604                 :             :   bool fits_to_tree_p (const T &x, const_tree);
    6605                 :             : 
    6606                 :             :   wide_int min_value (const_tree);
    6607                 :             :   wide_int max_value (const_tree);
    6608                 :             : #ifndef GENERATOR_FILE
    6609                 :             :   wide_int from_mpz (const_tree, mpz_t, bool);
    6610                 :             : #endif
    6611                 :             : }
    6612                 :             : 
    6613                 :             : template <typename T>
    6614                 :             : bool
    6615                 :     4191064 : wi::fits_to_boolean_p (const T &x, const_tree type)
    6616                 :             : {
    6617                 :             :   typedef typename poly_int_traits<T>::int_type int_type;
    6618                 :     4191064 :   return (known_eq (x, int_type (0))
    6619                 :     4197476 :           || known_eq (x, int_type (TYPE_UNSIGNED (type) ? 1 : -1)));
    6620                 :             : }
    6621                 :             : 
    6622                 :             : template <typename T>
    6623                 :             : bool
    6624                 :  2466609103 : wi::fits_to_tree_p (const T &x, const_tree type)
    6625                 :             : {
    6626                 :             :   /* Non-standard boolean types can have arbitrary precision but various
    6627                 :             :      transformations assume that they can only take values 0 and +/-1.  */
    6628                 :  2466609103 :   if (TREE_CODE (type) == BOOLEAN_TYPE)
    6629                 :     3218349 :     return fits_to_boolean_p (x, type);
    6630                 :             : 
    6631                 :  2463390754 :   if (TYPE_UNSIGNED (type))
    6632                 :  2208948875 :     return known_eq (x, zext (x, TYPE_PRECISION (type)));
    6633                 :             :   else
    6634                 :   254441879 :     return known_eq (x, sext (x, TYPE_PRECISION (type)));
    6635                 :             : }
    6636                 :             : 
    6637                 :             : /* Produce the smallest number that is represented in TYPE.  The precision
    6638                 :             :    and sign are taken from TYPE.  */
    6639                 :             : inline wide_int
    6640                 :    65363974 : wi::min_value (const_tree type)
    6641                 :             : {
    6642                 :    65363974 :   return min_value (TYPE_PRECISION (type), TYPE_SIGN (type));
    6643                 :             : }
    6644                 :             : 
    6645                 :             : /* Produce the largest number that is represented in TYPE.  The precision
    6646                 :             :    and sign are taken from TYPE.  */
    6647                 :             : inline wide_int
    6648                 :    65960442 : wi::max_value (const_tree type)
    6649                 :             : {
    6650                 :    65960442 :   return max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
    6651                 :             : }
    6652                 :             : 
    6653                 :             : /* Return true if INTEGER_CST T1 is less than INTEGER_CST T2,
    6654                 :             :    extending both according to their respective TYPE_SIGNs.  */
    6655                 :             : 
    6656                 :             : inline bool
    6657                 :  1286868272 : tree_int_cst_lt (const_tree t1, const_tree t2)
    6658                 :             : {
    6659                 :  1286868272 :   return wi::to_widest (t1) < wi::to_widest (t2);
    6660                 :             : }
    6661                 :             : 
    6662                 :             : /* Return true if INTEGER_CST T1 is less than or equal to INTEGER_CST T2,
    6663                 :             :    extending both according to their respective TYPE_SIGNs.  */
    6664                 :             : 
    6665                 :             : inline bool
    6666                 :     1618656 : tree_int_cst_le (const_tree t1, const_tree t2)
    6667                 :             : {
    6668                 :     1618656 :   return wi::to_widest (t1) <= wi::to_widest (t2);
    6669                 :             : }
    6670                 :             : 
    6671                 :             : /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2.  T1 and T2
    6672                 :             :    are both INTEGER_CSTs and their values are extended according to their
    6673                 :             :    respective TYPE_SIGNs.  */
    6674                 :             : 
    6675                 :             : inline int
    6676                 :   178090777 : tree_int_cst_compare (const_tree t1, const_tree t2)
    6677                 :             : {
    6678                 :   178090777 :   return wi::cmps (wi::to_widest (t1), wi::to_widest (t2));
    6679                 :             : }
    6680                 :             : 
    6681                 :             : /* FIXME - These declarations belong in builtins.h, expr.h and emit-rtl.h,
    6682                 :             :    but none of these files are allowed to be included from front ends.
    6683                 :             :    They should be split in two. One suitable for the FEs, the other suitable
    6684                 :             :    for the BE.  */
    6685                 :             : 
    6686                 :             : /* Assign the RTX to declaration.  */
    6687                 :             : extern void set_decl_rtl (tree, rtx);
    6688                 :             : extern bool complete_ctor_at_level_p (const_tree, HOST_WIDE_INT, const_tree);
    6689                 :             : 
    6690                 :             : /* Given an expression EXP that is a handled_component_p,
    6691                 :             :    look for the ultimate containing object, which is returned and specify
    6692                 :             :    the access position and size.  */
    6693                 :             : extern tree get_inner_reference (tree, poly_int64 *, poly_int64 *,
    6694                 :             :                                  tree *, machine_mode *, int *, int *, int *);
    6695                 :             : 
    6696                 :             : extern tree build_personality_function (const char *);
    6697                 :             : 
    6698                 :             : struct GTY(()) int_n_trees_t {
    6699                 :             :   /* These parts are initialized at runtime */
    6700                 :             :   tree signed_type;
    6701                 :             :   tree unsigned_type;
    6702                 :             : };
    6703                 :             : 
    6704                 :             : /* This is also in machmode.h */
    6705                 :             : extern bool int_n_enabled_p[NUM_INT_N_ENTS];
    6706                 :             : extern GTY(()) struct int_n_trees_t int_n_trees[NUM_INT_N_ENTS];
    6707                 :             : 
    6708                 :             : /* Like bit_position, but return as an integer.  It must be representable in
    6709                 :             :    that way (since it could be a signed value, we don't have the
    6710                 :             :    option of returning -1 like int_size_in_byte can.  */
    6711                 :             : 
    6712                 :             : inline HOST_WIDE_INT
    6713                 :    75244310 : int_bit_position (const_tree field)
    6714                 :             : {
    6715                 :   150488620 :   return ((wi::to_offset (DECL_FIELD_OFFSET (field)) << LOG2_BITS_PER_UNIT)
    6716                 :    75244310 :           + wi::to_offset (DECL_FIELD_BIT_OFFSET (field))).to_shwi ();
    6717                 :             : }
    6718                 :             : 
    6719                 :             : /* Return true if it makes sense to consider alias set for a type T.  */
    6720                 :             : 
    6721                 :             : inline bool
    6722                 :   147384278 : type_with_alias_set_p (const_tree t)
    6723                 :             : {
    6724                 :             :   /* Function and method types are never accessed as memory locations.  */
    6725                 :   147384278 :   if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
    6726                 :             :     return false;
    6727                 :             : 
    6728                 :   147053084 :   if (COMPLETE_TYPE_P (t))
    6729                 :             :     return true;
    6730                 :             : 
    6731                 :             :   /* Incomplete types cannot be accessed in general except for arrays
    6732                 :             :      where we can fetch its element despite we have no array bounds.  */
    6733                 :    10452599 :   if (TREE_CODE (t) == ARRAY_TYPE && COMPLETE_TYPE_P (TREE_TYPE (t)))
    6734                 :       91306 :     return true;
    6735                 :             : 
    6736                 :             :   return false;
    6737                 :             : }
    6738                 :             : 
    6739                 :             : extern location_t set_block (location_t loc, tree block);
    6740                 :             : 
    6741                 :             : extern void gt_ggc_mx (tree &);
    6742                 :             : extern void gt_pch_nx (tree &);
    6743                 :             : extern void gt_pch_nx (tree &, gt_pointer_operator, void *);
    6744                 :             : 
    6745                 :             : extern bool nonnull_arg_p (const_tree);
    6746                 :             : extern bool is_empty_type (const_tree);
    6747                 :             : extern bool default_is_empty_record (const_tree);
    6748                 :             : extern bool flexible_array_type_p (const_tree);
    6749                 :             : extern HOST_WIDE_INT arg_int_size_in_bytes (const_tree);
    6750                 :             : extern tree arg_size_in_bytes (const_tree);
    6751                 :             : extern bool expr_type_first_operand_type_p (tree_code);
    6752                 :             : 
    6753                 :             : extern location_t
    6754                 :             : set_source_range (tree expr, location_t start, location_t finish);
    6755                 :             : 
    6756                 :             : extern location_t
    6757                 :             : set_source_range (tree expr, source_range src_range);
    6758                 :             : 
    6759                 :             : /* Return true if it makes sense to promote/demote from_type to to_type. */
    6760                 :             : inline bool
    6761                 :      461098 : desired_pro_or_demotion_p (const_tree to_type, const_tree from_type)
    6762                 :             : {
    6763                 :      461098 :   unsigned int to_type_precision = TYPE_PRECISION (to_type);
    6764                 :             : 
    6765                 :             :   /* OK to promote if to_type is no bigger than word_mode. */
    6766                 :      461098 :   if (to_type_precision <= GET_MODE_PRECISION (word_mode))
    6767                 :             :     return true;
    6768                 :             : 
    6769                 :             :   /* Otherwise, allow only if narrowing or same precision conversions. */
    6770                 :       36581 :   return to_type_precision <= TYPE_PRECISION (from_type);
    6771                 :             : }
    6772                 :             : 
    6773                 :             : /* Pointer type used to declare builtins before we have seen its real
    6774                 :             :    declaration.  */
    6775                 :             : class builtin_structptr_type
    6776                 :             : {
    6777                 :             : public:
    6778                 :             :   tree& node;
    6779                 :             :   tree& base;
    6780                 :             :   const char *str;
    6781                 :             : };
    6782                 :             : extern const builtin_structptr_type builtin_structptr_types[6];
    6783                 :             : 
    6784                 :             : /* Return true if type T has the same precision as its underlying mode.  */
    6785                 :             : 
    6786                 :             : inline bool
    6787                 :   262148563 : type_has_mode_precision_p (const_tree t)
    6788                 :             : {
    6789                 :   262148563 :   return known_eq (TYPE_PRECISION (t), GET_MODE_PRECISION (TYPE_MODE (t)));
    6790                 :             : }
    6791                 :             : 
    6792                 :             : /* Helper functions for fndecl_built_in_p.  */
    6793                 :             : 
    6794                 :             : inline bool
    6795                 :             : built_in_function_equal_p (built_in_function name0, built_in_function name1)
    6796                 :             : {
    6797                 :             :   return name0 == name1;
    6798                 :             : }
    6799                 :             : 
    6800                 :             : /* Recursive case for two or more names.  */
    6801                 :             : 
    6802                 :             : template <typename... F>
    6803                 :             : inline bool
    6804                 :    35824450 : built_in_function_equal_p (built_in_function name0, built_in_function name1,
    6805                 :             :                            built_in_function name2, F... names)
    6806                 :             : {
    6807                 :    34112116 :   return name0 == name1 || built_in_function_equal_p (name0, name2, names...);
    6808                 :             : }
    6809                 :             : 
    6810                 :             : /* Return true if a FUNCTION_DECL NODE is a GCC built-in function.
    6811                 :             : 
    6812                 :             :    Note that it is different from the DECL_IS_UNDECLARED_BUILTIN
    6813                 :             :    accessor, as this is impervious to user declaration.  */
    6814                 :             : 
    6815                 :             : inline bool
    6816                 :  3897785512 : fndecl_built_in_p (const_tree node)
    6817                 :             : {
    6818                 :  3897785512 :   return DECL_BUILT_IN_CLASS (node) != NOT_BUILT_IN;
    6819                 :             : }
    6820                 :             : 
    6821                 :             : /* Return true if a FUNCTION_DECL NODE is a GCC built-in function
    6822                 :             :    of class KLASS.  */
    6823                 :             : 
    6824                 :             : inline bool
    6825                 :  2952612349 : fndecl_built_in_p (const_tree node, built_in_class klass)
    6826                 :             : {
    6827                 :  3850146444 :   return fndecl_built_in_p (node) && DECL_BUILT_IN_CLASS (node) == klass;
    6828                 :             : }
    6829                 :             : 
    6830                 :             : /* Return true if a FUNCTION_DECL NODE is a GCC built-in function
    6831                 :             :    of class KLASS with name equal to NAME.  */
    6832                 :             : 
    6833                 :             : inline bool
    6834                 :   141652967 : fndecl_built_in_p (const_tree node, unsigned int name, built_in_class klass)
    6835                 :             : {
    6836                 :   141652967 :   return (fndecl_built_in_p (node, klass)
    6837                 :   142512559 :           && DECL_UNCHECKED_FUNCTION_CODE (node) == name);
    6838                 :             : }
    6839                 :             : 
    6840                 :             : /* Return true if a FUNCTION_DECL NODE is a GCC built-in function
    6841                 :             :    of BUILT_IN_NORMAL class with name equal to NAME1 (or other mentioned
    6842                 :             :    NAMES).  */
    6843                 :             : 
    6844                 :             : template <typename... F>
    6845                 :             : inline bool
    6846                 :  1020440574 : fndecl_built_in_p (const_tree node, built_in_function name1, F... names)
    6847                 :             : {
    6848                 :  1020440574 :   return (fndecl_built_in_p (node, BUILT_IN_NORMAL)
    6849                 :  1020440574 :           && built_in_function_equal_p (DECL_FUNCTION_CODE (node),
    6850                 :  1020440574 :                                         name1, names...));
    6851                 :             : }
    6852                 :             : 
    6853                 :             : /* A struct for encapsulating location information about an operator
    6854                 :             :    and the operation built from it.
    6855                 :             : 
    6856                 :             :    m_operator_loc is the location of the operator
    6857                 :             :    m_combined_loc is the location of the compound expression.
    6858                 :             : 
    6859                 :             :    For example, given "a && b" the, operator location is:
    6860                 :             :       a && b
    6861                 :             :         ^~
    6862                 :             :    and the combined location is:
    6863                 :             :       a && b
    6864                 :             :       ~~^~~~
    6865                 :             :    Capturing this information allows for class binary_op_rich_location
    6866                 :             :    to provide detailed information about e.g. type mismatches in binary
    6867                 :             :    operations where enough location information is available:
    6868                 :             : 
    6869                 :             :      arg_0 op arg_1
    6870                 :             :      ~~~~~ ^~ ~~~~~
    6871                 :             :        |        |
    6872                 :             :        |        arg1 type
    6873                 :             :        arg0 type
    6874                 :             : 
    6875                 :             :    falling back to just showing the combined location:
    6876                 :             : 
    6877                 :             :      arg_0 op arg_1
    6878                 :             :      ~~~~~~^~~~~~~~
    6879                 :             : 
    6880                 :             :    where it is not.  */
    6881                 :             : 
    6882                 :             : class op_location_t
    6883                 :             : {
    6884                 :             : public:
    6885                 :             :   location_t m_operator_loc;
    6886                 :             :   location_t m_combined_loc;
    6887                 :             : 
    6888                 :             :   /* 1-argument ctor, for constructing from a combined location.  */
    6889                 :   140639322 :   op_location_t (location_t combined_loc)
    6890                 :   140553493 :   : m_operator_loc (UNKNOWN_LOCATION), m_combined_loc (combined_loc)
    6891                 :             :   {}
    6892                 :             : 
    6893                 :             :   /* 2-argument ctor, for distinguishing between the operator's location
    6894                 :             :      and the combined location.  */
    6895                 :   113900296 :   op_location_t (location_t operator_loc, location_t combined_loc)
    6896                 :   113900296 :   : m_operator_loc (operator_loc), m_combined_loc (combined_loc)
    6897                 :             :   {}
    6898                 :             : 
    6899                 :             :   /* Implicitly convert back to a location_t, using the combined location.  */
    6900                 :   403355963 :   operator location_t () const { return m_combined_loc; }
    6901                 :             : };
    6902                 :             : 
    6903                 :             : /* Code that doesn't refer to any warning.  Has no effect on suppression
    6904                 :             :    functions.  */
    6905                 :             : constexpr opt_code no_warning = opt_code ();
    6906                 :             : /* Wildcard code that refers to all warnings.  */
    6907                 :             : constexpr opt_code all_warnings = N_OPTS;
    6908                 :             : 
    6909                 :             : /* Return the disposition for a warning (or all warnings by default)
    6910                 :             :    at a location.  */
    6911                 :             : extern bool warning_suppressed_at (location_t, opt_code = all_warnings);
    6912                 :             : /* Set the disposition for a warning (or all warnings by default)
    6913                 :             :    at a location to disabled by default.  */
    6914                 :             : extern bool suppress_warning_at (location_t, opt_code = all_warnings,
    6915                 :             :                                  bool = true);
    6916                 :             : /* Copy warning disposition from one location to another.  */
    6917                 :             : extern void copy_warning (location_t, location_t);
    6918                 :             : 
    6919                 :             : /* Return the disposition for a warning (or all warnings by default)
    6920                 :             :    for an expression.  */
    6921                 :             : extern bool warning_suppressed_p (const_tree, opt_code = all_warnings);
    6922                 :             : /* Set the disposition for a warning (or all warnings by default)
    6923                 :             :    at a location to disabled by default.  */
    6924                 :             : extern void suppress_warning (tree, opt_code = all_warnings, bool = true)
    6925                 :             :   ATTRIBUTE_NONNULL (1);
    6926                 :             : /* Copy warning disposition from one expression to another.  */
    6927                 :             : extern void copy_warning (tree, const_tree);
    6928                 :             : 
    6929                 :             : /* Return the zero-based number corresponding to the argument being
    6930                 :             :    deallocated if FNDECL is a deallocation function or an out-of-bounds
    6931                 :             :    value if it isn't.  */
    6932                 :             : extern unsigned fndecl_dealloc_argno (tree);
    6933                 :             : 
    6934                 :             : /* If an expression refers to a character array or pointer declared
    6935                 :             :    attribute nonstring, return a decl for that array or pointer and
    6936                 :             :    if nonnull, set the second argument to the referenced enclosing
    6937                 :             :    object or pointer.  Otherwise return null.  */
    6938                 :             : extern tree get_attr_nonstring_decl (tree, tree * = NULL);
    6939                 :             : 
    6940                 :             : extern int get_target_clone_attr_len (tree);
    6941                 :             : 
    6942                 :             : #endif  /* GCC_TREE_H  */
        

Generated by: LCOV version 2.1-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.