1*38fd1498Szrj/* This file contains the definitions and documentation for the 2*38fd1498Szrj additional tree codes used in the GNU C++ compiler (see tree.def 3*38fd1498Szrj for the standard codes). 4*38fd1498Szrj Copyright (C) 1987-2018 Free Software Foundation, Inc. 5*38fd1498Szrj Hacked by Michael Tiemann (tiemann@cygnus.com) 6*38fd1498Szrj 7*38fd1498SzrjThis file is part of GCC. 8*38fd1498Szrj 9*38fd1498SzrjGCC is free software; you can redistribute it and/or modify 10*38fd1498Szrjit under the terms of the GNU General Public License as published by 11*38fd1498Szrjthe Free Software Foundation; either version 3, or (at your option) 12*38fd1498Szrjany later version. 13*38fd1498Szrj 14*38fd1498SzrjGCC is distributed in the hope that it will be useful, 15*38fd1498Szrjbut WITHOUT ANY WARRANTY; without even the implied warranty of 16*38fd1498SzrjMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17*38fd1498SzrjGNU General Public License for more details. 18*38fd1498Szrj 19*38fd1498SzrjYou should have received a copy of the GNU General Public License 20*38fd1498Szrjalong with GCC; see the file COPYING3. If not see 21*38fd1498Szrj<http://www.gnu.org/licenses/>. */ 22*38fd1498Szrj 23*38fd1498Szrj 24*38fd1498Szrj/* An OFFSET_REF is used in two situations: 25*38fd1498Szrj 26*38fd1498Szrj 1. An expression of the form `A::m' where `A' is a class and `m' is 27*38fd1498Szrj a non-static member. In this case, operand 0 will be a TYPE 28*38fd1498Szrj (corresponding to `A') and operand 1 will be a FIELD_DECL, 29*38fd1498Szrj BASELINK, or TEMPLATE_ID_EXPR (corresponding to `m'). 30*38fd1498Szrj 31*38fd1498Szrj The expression is a pointer-to-member if its address is taken, 32*38fd1498Szrj but simply denotes a member of the object if its address is not 33*38fd1498Szrj taken. 34*38fd1498Szrj 35*38fd1498Szrj This form is only used during the parsing phase; once semantic 36*38fd1498Szrj analysis has taken place they are eliminated. 37*38fd1498Szrj 38*38fd1498Szrj 2. An expression of the form `x.*p'. In this case, operand 0 will 39*38fd1498Szrj be an expression corresponding to `x' and operand 1 will be an 40*38fd1498Szrj expression with pointer-to-member type. */ 41*38fd1498SzrjDEFTREECODE (OFFSET_REF, "offset_ref", tcc_reference, 2) 42*38fd1498Szrj 43*38fd1498Szrj/* A pointer-to-member constant. For a pointer-to-member constant 44*38fd1498Szrj `X::Y' The PTRMEM_CST_CLASS is the RECORD_TYPE for `X' and the 45*38fd1498Szrj PTRMEM_CST_MEMBER is the _DECL for `Y'. */ 46*38fd1498SzrjDEFTREECODE (PTRMEM_CST, "ptrmem_cst", tcc_constant, 0) 47*38fd1498Szrj 48*38fd1498Szrj/* For NEW_EXPR, operand 0 is the placement list. 49*38fd1498Szrj Operand 1 is the new-declarator. 50*38fd1498Szrj Operand 2 is the number of elements in the array. 51*38fd1498Szrj Operand 3 is the initializer. */ 52*38fd1498SzrjDEFTREECODE (NEW_EXPR, "nw_expr", tcc_expression, 4) 53*38fd1498SzrjDEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", tcc_expression, 3) 54*38fd1498Szrj 55*38fd1498Szrj/* For DELETE_EXPR, operand 0 is the store to be destroyed. 56*38fd1498Szrj Operand 1 is the value to pass to the destroying function 57*38fd1498Szrj saying whether the store should be deallocated as well. */ 58*38fd1498SzrjDEFTREECODE (DELETE_EXPR, "dl_expr", tcc_expression, 2) 59*38fd1498SzrjDEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", tcc_expression, 2) 60*38fd1498Szrj 61*38fd1498Szrj/* Value is reference to particular overloaded class method. 62*38fd1498Szrj Operand 0 is the class, operand 1 is the field 63*38fd1498Szrj The COMPLEXITY field holds the class level (usually 0). */ 64*38fd1498SzrjDEFTREECODE (SCOPE_REF, "scope_ref", tcc_reference, 2) 65*38fd1498Szrj 66*38fd1498Szrj/* When composing an object with a member, this is the result. 67*38fd1498Szrj Operand 0 is the object. Operand 1 is the member (usually 68*38fd1498Szrj a dereferenced pointer to member). */ 69*38fd1498SzrjDEFTREECODE (MEMBER_REF, "member_ref", tcc_reference, 2) 70*38fd1498Szrj 71*38fd1498Szrj/* Type conversion operator in C++. TREE_TYPE is type that this 72*38fd1498Szrj operator converts to. Operand is expression to be converted. */ 73*38fd1498SzrjDEFTREECODE (TYPE_EXPR, "type_expr", tcc_expression, 1) 74*38fd1498Szrj 75*38fd1498Szrj/* AGGR_INIT_EXPRs have a variably-sized representation similar to 76*38fd1498Szrj that of CALL_EXPRs. Operand 0 is an INTEGER_CST node containing the 77*38fd1498Szrj operand count, operand 1 is the function which performs initialization, 78*38fd1498Szrj operand 2 is the slot which was allocated for this expression, and 79*38fd1498Szrj the remaining operands are the arguments to the initialization function. */ 80*38fd1498SzrjDEFTREECODE (AGGR_INIT_EXPR, "aggr_init_expr", tcc_vl_exp, 3) 81*38fd1498Szrj 82*38fd1498Szrj/* Initialization of an array from another array, expressed at a high level 83*38fd1498Szrj so that it works with TARGET_EXPR. Operand 0 is the target, operand 1 84*38fd1498Szrj is the initializer. */ 85*38fd1498SzrjDEFTREECODE (VEC_INIT_EXPR, "vec_init_expr", tcc_expression, 2) 86*38fd1498Szrj 87*38fd1498Szrj/* A throw expression. operand 0 is the expression, if there was one, 88*38fd1498Szrj else it is NULL_TREE. */ 89*38fd1498SzrjDEFTREECODE (THROW_EXPR, "throw_expr", tcc_expression, 1) 90*38fd1498Szrj 91*38fd1498Szrj/* An empty class object. The TREE_TYPE gives the class type. We use 92*38fd1498Szrj these to avoid actually creating instances of the empty classes. */ 93*38fd1498SzrjDEFTREECODE (EMPTY_CLASS_EXPR, "empty_class_expr", tcc_expression, 0) 94*38fd1498Szrj 95*38fd1498Szrj/* A reference to a member function or member functions from a base 96*38fd1498Szrj class. BASELINK_FUNCTIONS gives the FUNCTION_DECL, 97*38fd1498Szrj TEMPLATE_DECL, OVERLOAD, or TEMPLATE_ID_EXPR corresponding to the 98*38fd1498Szrj functions. BASELINK_BINFO gives the base from which the functions 99*38fd1498Szrj come, i.e., the base to which the `this' pointer must be converted 100*38fd1498Szrj before the functions are called. BASELINK_ACCESS_BINFO gives the 101*38fd1498Szrj base used to name the functions. 102*38fd1498Szrj 103*38fd1498Szrj A BASELINK is an expression; the TREE_TYPE of the BASELINK gives 104*38fd1498Szrj the type of the expression. This type is either a FUNCTION_TYPE, 105*38fd1498Szrj METHOD_TYPE, or `unknown_type_node' indicating that the function is 106*38fd1498Szrj overloaded. */ 107*38fd1498SzrjDEFTREECODE (BASELINK, "baselink", tcc_exceptional, 0) 108*38fd1498Szrj 109*38fd1498Szrj/* Template definition. The following fields have the specified uses, 110*38fd1498Szrj although there are other macros in cp-tree.h that should be used for 111*38fd1498Szrj accessing this data. 112*38fd1498Szrj DECL_ARGUMENTS template parm vector 113*38fd1498Szrj DECL_TEMPLATE_INFO template text &c 114*38fd1498Szrj DECL_VINDEX list of instantiations already produced; 115*38fd1498Szrj only done for functions so far 116*38fd1498Szrj For class template: 117*38fd1498Szrj DECL_INITIAL associated templates (methods &c) 118*38fd1498Szrj DECL_TEMPLATE_RESULT null 119*38fd1498Szrj For non-class templates: 120*38fd1498Szrj TREE_TYPE type of object to be constructed 121*38fd1498Szrj DECL_TEMPLATE_RESULT decl for object to be created 122*38fd1498Szrj (e.g., FUNCTION_DECL with tmpl parms used) 123*38fd1498Szrj */ 124*38fd1498SzrjDEFTREECODE (TEMPLATE_DECL, "template_decl", tcc_declaration, 0) 125*38fd1498Szrj 126*38fd1498Szrj/* Index into a template parameter list. The TEMPLATE_PARM_IDX gives 127*38fd1498Szrj the index (from 0) of the parameter, while the TEMPLATE_PARM_LEVEL 128*38fd1498Szrj gives the level (from 1) of the parameter. 129*38fd1498Szrj 130*38fd1498Szrj Here's an example: 131*38fd1498Szrj 132*38fd1498Szrj template <class T> // Index 0, Level 1. 133*38fd1498Szrj struct S 134*38fd1498Szrj { 135*38fd1498Szrj template <class U, // Index 0, Level 2. 136*38fd1498Szrj class V> // Index 1, Level 2. 137*38fd1498Szrj void f(); 138*38fd1498Szrj }; 139*38fd1498Szrj 140*38fd1498Szrj The DESCENDANTS will be a chain of TEMPLATE_PARM_INDEXs descended 141*38fd1498Szrj from this one. The first descendant will have the same IDX, but 142*38fd1498Szrj its LEVEL will be one less. The TREE_CHAIN field is used to chain 143*38fd1498Szrj together the descendants. The TEMPLATE_PARM_DECL is the 144*38fd1498Szrj declaration of this parameter, either a TYPE_DECL or CONST_DECL. 145*38fd1498Szrj The TEMPLATE_PARM_ORIG_LEVEL is the LEVEL of the most distant 146*38fd1498Szrj parent, i.e., the LEVEL that the parameter originally had when it 147*38fd1498Szrj was declared. For example, if we instantiate S<int>, we will have: 148*38fd1498Szrj 149*38fd1498Szrj struct S<int> 150*38fd1498Szrj { 151*38fd1498Szrj template <class U, // Index 0, Level 1, Orig Level 2 152*38fd1498Szrj class V> // Index 1, Level 1, Orig Level 2 153*38fd1498Szrj void f(); 154*38fd1498Szrj }; 155*38fd1498Szrj 156*38fd1498Szrj The LEVEL is the level of the parameter when we are worrying about 157*38fd1498Szrj the types of things; the ORIG_LEVEL is the level when we are 158*38fd1498Szrj worrying about instantiating things. */ 159*38fd1498SzrjDEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", tcc_exceptional, 0) 160*38fd1498Szrj 161*38fd1498Szrj/* Index into a template parameter list for template template parameters. 162*38fd1498Szrj This parameter must be a type. The TYPE_FIELDS value will be a 163*38fd1498Szrj TEMPLATE_PARM_INDEX. 164*38fd1498Szrj 165*38fd1498Szrj It is used without template arguments like TT in C<TT>, 166*38fd1498Szrj TYPE_NAME is a TEMPLATE_DECL. */ 167*38fd1498SzrjDEFTREECODE (TEMPLATE_TEMPLATE_PARM, "template_template_parm", tcc_type, 0) 168*38fd1498Szrj 169*38fd1498Szrj/* The ordering of the following codes is optimized for the checking 170*38fd1498Szrj macros in tree.h. Changing the order will degrade the speed of the 171*38fd1498Szrj compiler. TEMPLATE_TYPE_PARM, TYPENAME_TYPE, TYPEOF_TYPE, 172*38fd1498Szrj BOUND_TEMPLATE_TEMPLATE_PARM. */ 173*38fd1498Szrj 174*38fd1498Szrj/* Index into a template parameter list. This parameter must be a type. 175*38fd1498Szrj The type.values field will be a TEMPLATE_PARM_INDEX. */ 176*38fd1498SzrjDEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", tcc_type, 0) 177*38fd1498Szrj 178*38fd1498Szrj/* A type designated by `typename T::t'. TYPE_CONTEXT is `T', 179*38fd1498Szrj TYPE_NAME is an IDENTIFIER_NODE for `t'. If the type was named via 180*38fd1498Szrj template-id, TYPENAME_TYPE_FULLNAME will hold the TEMPLATE_ID_EXPR. 181*38fd1498Szrj TREE_TYPE is always NULL. */ 182*38fd1498SzrjDEFTREECODE (TYPENAME_TYPE, "typename_type", tcc_type, 0) 183*38fd1498Szrj 184*38fd1498Szrj/* A type designated by `__typeof (expr)'. TYPEOF_TYPE_EXPR is the 185*38fd1498Szrj expression in question. */ 186*38fd1498SzrjDEFTREECODE (TYPEOF_TYPE, "typeof_type", tcc_type, 0) 187*38fd1498Szrj 188*38fd1498Szrj/* Like TEMPLATE_TEMPLATE_PARM it is used with bound template arguments 189*38fd1498Szrj like TT<int>. 190*38fd1498Szrj In this case, TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO contains the 191*38fd1498Szrj template name and its bound arguments. TYPE_NAME is a TYPE_DECL. */ 192*38fd1498SzrjDEFTREECODE (BOUND_TEMPLATE_TEMPLATE_PARM, "bound_template_template_parm", 193*38fd1498Szrj tcc_type, 0) 194*38fd1498Szrj 195*38fd1498Szrj/* For template template argument of the form `T::template C'. 196*38fd1498Szrj TYPE_CONTEXT is `T', the template parameter dependent object. 197*38fd1498Szrj TYPE_NAME is an IDENTIFIER_NODE for `C', the member class template. */ 198*38fd1498SzrjDEFTREECODE (UNBOUND_CLASS_TEMPLATE, "unbound_class_template", tcc_type, 0) 199*38fd1498Szrj 200*38fd1498Szrj/* A using declaration. USING_DECL_SCOPE contains the specified 201*38fd1498Szrj scope. In a variadic using-declaration, this is a TYPE_PACK_EXPANSION. 202*38fd1498Szrj In a member using decl, unless DECL_DEPENDENT_P is true, 203*38fd1498Szrj USING_DECL_DECLS contains the _DECL or OVERLOAD so named. This is 204*38fd1498Szrj not an alias, but is later expanded into multiple aliases. */ 205*38fd1498SzrjDEFTREECODE (USING_DECL, "using_decl", tcc_declaration, 0) 206*38fd1498Szrj 207*38fd1498Szrj/* A using directive. The operand is USING_STMT_NAMESPACE. */ 208*38fd1498SzrjDEFTREECODE (USING_STMT, "using_stmt", tcc_statement, 1) 209*38fd1498Szrj 210*38fd1498Szrj/* An un-parsed default argument. Holds a vector of input tokens and 211*38fd1498Szrj a vector of places where the argument was instantiated before 212*38fd1498Szrj parsing had occurred. */ 213*38fd1498SzrjDEFTREECODE (DEFAULT_ARG, "default_arg", tcc_exceptional, 0) 214*38fd1498Szrj 215*38fd1498Szrj/* An uninstantiated/unevaluated noexcept-specification. For the 216*38fd1498Szrj uninstantiated case, DEFERRED_NOEXCEPT_PATTERN is the pattern from the 217*38fd1498Szrj template, and DEFERRED_NOEXCEPT_ARGS are the template arguments to 218*38fd1498Szrj substitute into the pattern when needed. For the unevaluated case, 219*38fd1498Szrj those slots are NULL_TREE and we use get_defaulted_eh_spec to find 220*38fd1498Szrj the exception-specification. */ 221*38fd1498SzrjDEFTREECODE (DEFERRED_NOEXCEPT, "deferred_noexcept", tcc_exceptional, 0) 222*38fd1498Szrj 223*38fd1498Szrj/* A template-id, like foo<int>. The first operand is the template. 224*38fd1498Szrj The second is NULL if there are no explicit arguments, or a 225*38fd1498Szrj TREE_VEC of arguments. The template will be a FUNCTION_DECL, 226*38fd1498Szrj TEMPLATE_DECL, or an OVERLOAD. If the template-id refers to a 227*38fd1498Szrj member template, the template may be an IDENTIFIER_NODE. */ 228*38fd1498SzrjDEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", tcc_expression, 2) 229*38fd1498Szrj 230*38fd1498Szrj/* One of a set of overloaded functions. */ 231*38fd1498SzrjDEFTREECODE (OVERLOAD, "overload", tcc_exceptional, 0) 232*38fd1498Szrj 233*38fd1498Szrj/* A pseudo-destructor, of the form "OBJECT.~DESTRUCTOR" or 234*38fd1498Szrj "OBJECT.SCOPE::~DESTRUCTOR. The first operand is the OBJECT. The 235*38fd1498Szrj second operand (if non-NULL) is the SCOPE. The third operand is 236*38fd1498Szrj the TYPE node corresponding to the DESTRUCTOR. The type of the 237*38fd1498Szrj first operand will always be a scalar type. 238*38fd1498Szrj 239*38fd1498Szrj The type of a PSEUDO_DTOR_EXPR is always "void", even though it can 240*38fd1498Szrj be used as if it were a zero-argument function. We handle the 241*38fd1498Szrj function-call case specially, and giving it "void" type prevents it 242*38fd1498Szrj being used in expressions in ways that are not permitted. */ 243*38fd1498SzrjDEFTREECODE (PSEUDO_DTOR_EXPR, "pseudo_dtor_expr", tcc_expression, 3) 244*38fd1498Szrj 245*38fd1498Szrj/* A whole bunch of tree codes for the initial, superficial parsing of 246*38fd1498Szrj templates. */ 247*38fd1498SzrjDEFTREECODE (MODOP_EXPR, "modop_expr", tcc_expression, 3) 248*38fd1498SzrjDEFTREECODE (CAST_EXPR, "cast_expr", tcc_unary, 1) 249*38fd1498SzrjDEFTREECODE (REINTERPRET_CAST_EXPR, "reinterpret_cast_expr", tcc_unary, 1) 250*38fd1498SzrjDEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", tcc_unary, 1) 251*38fd1498SzrjDEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", tcc_unary, 1) 252*38fd1498SzrjDEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", tcc_unary, 1) 253*38fd1498SzrjDEFTREECODE (IMPLICIT_CONV_EXPR, "implicit_conv_expr", tcc_unary, 1) 254*38fd1498SzrjDEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", tcc_expression, 2) 255*38fd1498SzrjDEFTREECODE (TYPEID_EXPR, "typeid_expr", tcc_expression, 1) 256*38fd1498SzrjDEFTREECODE (NOEXCEPT_EXPR, "noexcept_expr", tcc_unary, 1) 257*38fd1498Szrj 258*38fd1498Szrj/* A placeholder for an expression that is not type-dependent, but 259*38fd1498Szrj does occur in a template. When an expression that is not 260*38fd1498Szrj type-dependent appears in a larger expression, we must compute the 261*38fd1498Szrj type of that larger expression. That computation would normally 262*38fd1498Szrj modify the original expression, which would change the mangling of 263*38fd1498Szrj that expression if it appeared in a template argument list. In 264*38fd1498Szrj that situation, we create a NON_DEPENDENT_EXPR to take the place of 265*38fd1498Szrj the original expression. The expression is the only operand -- it 266*38fd1498Szrj is only needed for diagnostics. */ 267*38fd1498SzrjDEFTREECODE (NON_DEPENDENT_EXPR, "non_dependent_expr", tcc_expression, 1) 268*38fd1498Szrj 269*38fd1498Szrj/* CTOR_INITIALIZER is a placeholder in template code for a call to 270*38fd1498Szrj setup_vtbl_pointer (and appears in all functions, not just ctors). */ 271*38fd1498SzrjDEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", tcc_expression, 1) 272*38fd1498Szrj 273*38fd1498SzrjDEFTREECODE (TRY_BLOCK, "try_block", tcc_statement, 2) 274*38fd1498Szrj 275*38fd1498SzrjDEFTREECODE (EH_SPEC_BLOCK, "eh_spec_block", tcc_statement, 2) 276*38fd1498Szrj 277*38fd1498Szrj/* A HANDLER wraps a catch handler for the HANDLER_TYPE. If this is 278*38fd1498Szrj CATCH_ALL_TYPE, then the handler catches all types. The declaration of 279*38fd1498Szrj the catch variable is in HANDLER_PARMS, and the body block in 280*38fd1498Szrj HANDLER_BODY. */ 281*38fd1498SzrjDEFTREECODE (HANDLER, "handler", tcc_statement, 2) 282*38fd1498Szrj 283*38fd1498Szrj/* A MUST_NOT_THROW_EXPR wraps an expression that may not 284*38fd1498Szrj throw, and must call terminate if it does. The second argument 285*38fd1498Szrj is a condition, used in templates to express noexcept (condition). */ 286*38fd1498SzrjDEFTREECODE (MUST_NOT_THROW_EXPR, "must_not_throw_expr", tcc_expression, 2) 287*38fd1498Szrj 288*38fd1498Szrj/* A CLEANUP_STMT marks the point at which a declaration is fully 289*38fd1498Szrj constructed. The CLEANUP_EXPR is run on behalf of CLEANUP_DECL 290*38fd1498Szrj when CLEANUP_BODY completes. */ 291*38fd1498SzrjDEFTREECODE (CLEANUP_STMT, "cleanup_stmt", tcc_statement, 3) 292*38fd1498Szrj 293*38fd1498Szrj/* Represents an 'if' statement. The operands are IF_COND, 294*38fd1498Szrj THEN_CLAUSE, and ELSE_CLAUSE, and the current scope, respectively. */ 295*38fd1498Szrj/* ??? It is currently still necessary to distinguish between IF_STMT 296*38fd1498Szrj and COND_EXPR for the benefit of templates. */ 297*38fd1498SzrjDEFTREECODE (IF_STMT, "if_stmt", tcc_statement, 4) 298*38fd1498Szrj 299*38fd1498Szrj/* Used to represent a `for' statement. The operands are 300*38fd1498Szrj FOR_INIT_STMT, FOR_COND, FOR_EXPR, and FOR_BODY, respectively. */ 301*38fd1498SzrjDEFTREECODE (FOR_STMT, "for_stmt", tcc_statement, 5) 302*38fd1498Szrj 303*38fd1498Szrj/* Used to represent a range-based `for' statement. The operands are 304*38fd1498Szrj RANGE_FOR_DECL, RANGE_FOR_EXPR, RANGE_FOR_BODY, and RANGE_FOR_SCOPE, 305*38fd1498Szrj RANGE_FOR_UNROLL respectively. Only used in templates. */ 306*38fd1498SzrjDEFTREECODE (RANGE_FOR_STMT, "range_for_stmt", tcc_statement, 5) 307*38fd1498Szrj 308*38fd1498Szrj/* Used to represent a 'while' statement. The operands are WHILE_COND 309*38fd1498Szrj and WHILE_BODY, respectively. */ 310*38fd1498SzrjDEFTREECODE (WHILE_STMT, "while_stmt", tcc_statement, 2) 311*38fd1498Szrj 312*38fd1498Szrj/* Used to represent a 'do' statement. The operands are DO_BODY and 313*38fd1498Szrj DO_COND, respectively. */ 314*38fd1498SzrjDEFTREECODE (DO_STMT, "do_stmt", tcc_statement, 2) 315*38fd1498Szrj 316*38fd1498Szrj/* Used to represent a 'break' statement. */ 317*38fd1498SzrjDEFTREECODE (BREAK_STMT, "break_stmt", tcc_statement, 0) 318*38fd1498Szrj 319*38fd1498Szrj/* Used to represent a 'continue' statement. */ 320*38fd1498SzrjDEFTREECODE (CONTINUE_STMT, "continue_stmt", tcc_statement, 0) 321*38fd1498Szrj 322*38fd1498Szrj/* Used to represent a 'switch' statement. The operands are 323*38fd1498Szrj SWITCH_STMT_COND, SWITCH_STMT_BODY, SWITCH_STMT_TYPE, and 324*38fd1498Szrj SWITCH_STMT_SCOPE, respectively. */ 325*38fd1498SzrjDEFTREECODE (SWITCH_STMT, "switch_stmt", tcc_statement, 4) 326*38fd1498Szrj 327*38fd1498Szrj/* Used to represent an expression statement. Use `EXPR_STMT_EXPR' to 328*38fd1498Szrj obtain the expression. */ 329*38fd1498SzrjDEFTREECODE (EXPR_STMT, "expr_stmt", tcc_expression, 1) 330*38fd1498Szrj 331*38fd1498SzrjDEFTREECODE (TAG_DEFN, "tag_defn", tcc_expression, 0) 332*38fd1498Szrj 333*38fd1498Szrj/* Represents an 'offsetof' expression during template expansion. */ 334*38fd1498SzrjDEFTREECODE (OFFSETOF_EXPR, "offsetof_expr", tcc_expression, 2) 335*38fd1498Szrj 336*38fd1498Szrj/* Represents an '__builtin_addressof' expression during template 337*38fd1498Szrj expansion. This is similar to ADDR_EXPR, but it doesn't invoke 338*38fd1498Szrj overloaded & operators. */ 339*38fd1498SzrjDEFTREECODE (ADDRESSOF_EXPR, "addressof_expr", tcc_expression, 1) 340*38fd1498Szrj 341*38fd1498Szrj/* Represents the -> operator during template expansion. */ 342*38fd1498SzrjDEFTREECODE (ARROW_EXPR, "arrow_expr", tcc_expression, 1) 343*38fd1498Szrj 344*38fd1498Szrj/* Represents an '__alignof__' expression during template 345*38fd1498Szrj expansion. */ 346*38fd1498SzrjDEFTREECODE (ALIGNOF_EXPR, "alignof_expr", tcc_expression, 1) 347*38fd1498Szrj 348*38fd1498Szrj/* Represents an Objective-C++ '@encode' expression during template 349*38fd1498Szrj expansion. */ 350*38fd1498SzrjDEFTREECODE (AT_ENCODE_EXPR, "at_encode_expr", tcc_expression, 1) 351*38fd1498Szrj 352*38fd1498Szrj/* A STMT_EXPR represents a statement-expression during template 353*38fd1498Szrj expansion. This is the GCC extension { ( ... ) }. The 354*38fd1498Szrj STMT_EXPR_STMT is the statement given by the expression. */ 355*38fd1498SzrjDEFTREECODE (STMT_EXPR, "stmt_expr", tcc_expression, 1) 356*38fd1498Szrj 357*38fd1498Szrj/* Unary plus. Operand 0 is the expression to which the unary plus 358*38fd1498Szrj is applied. */ 359*38fd1498SzrjDEFTREECODE (UNARY_PLUS_EXPR, "unary_plus_expr", tcc_unary, 1) 360*38fd1498Szrj 361*38fd1498Szrj/** C++11 extensions. */ 362*38fd1498Szrj 363*38fd1498Szrj/* A static assertion. This is a C++11 extension. 364*38fd1498Szrj STATIC_ASSERT_CONDITION contains the condition that is being 365*38fd1498Szrj checked. STATIC_ASSERT_MESSAGE contains the message (a string 366*38fd1498Szrj literal) to be displayed if the condition fails to hold. */ 367*38fd1498SzrjDEFTREECODE (STATIC_ASSERT, "static_assert", tcc_exceptional, 0) 368*38fd1498Szrj 369*38fd1498Szrj/* Represents an argument pack of types (or templates). An argument 370*38fd1498Szrj pack stores zero or more arguments that will be used to instantiate 371*38fd1498Szrj a parameter pack. 372*38fd1498Szrj 373*38fd1498Szrj ARGUMENT_PACK_ARGS retrieves the arguments stored in the argument 374*38fd1498Szrj pack. 375*38fd1498Szrj 376*38fd1498Szrj Example: 377*38fd1498Szrj template<typename... Values> 378*38fd1498Szrj class tuple { ... }; 379*38fd1498Szrj 380*38fd1498Szrj tuple<int, float, double> t; 381*38fd1498Szrj 382*38fd1498Szrj Values is a (template) parameter pack. When tuple<int, float, 383*38fd1498Szrj double> is instantiated, the Values parameter pack is instantiated 384*38fd1498Szrj with the argument pack <int, float, double>. ARGUMENT_PACK_ARGS will 385*38fd1498Szrj be a TREE_VEC containing int, float, and double. */ 386*38fd1498SzrjDEFTREECODE (TYPE_ARGUMENT_PACK, "type_argument_pack", tcc_type, 0) 387*38fd1498Szrj 388*38fd1498Szrj/* Represents an argument pack of values, which can be used either for 389*38fd1498Szrj non-type template arguments or function call arguments. 390*38fd1498Szrj 391*38fd1498Szrj NONTYPE_ARGUMENT_PACK plays precisely the same role as 392*38fd1498Szrj TYPE_ARGUMENT_PACK, but will be used for packing non-type template 393*38fd1498Szrj arguments (e.g., "int... Dimensions") or function arguments ("const 394*38fd1498Szrj Args&... args"). */ 395*38fd1498SzrjDEFTREECODE (NONTYPE_ARGUMENT_PACK, "nontype_argument_pack", tcc_expression, 1) 396*38fd1498Szrj 397*38fd1498Szrj/* Represents a type expression that will be expanded into a list of 398*38fd1498Szrj types when instantiated with one or more argument packs. 399*38fd1498Szrj 400*38fd1498Szrj PACK_EXPANSION_PATTERN retrieves the expansion pattern. This is 401*38fd1498Szrj the type or expression that we will substitute into with each 402*38fd1498Szrj argument in an argument pack. 403*38fd1498Szrj 404*38fd1498Szrj SET_PACK_EXPANSION_PATTERN sets the expansion pattern. 405*38fd1498Szrj 406*38fd1498Szrj PACK_EXPANSION_PARAMETER_PACKS contains a TREE_LIST of the parameter 407*38fd1498Szrj packs that are used in this pack expansion. 408*38fd1498Szrj 409*38fd1498Szrj Example: 410*38fd1498Szrj template<typename... Values> 411*38fd1498Szrj struct tied : tuple<Values&...> { 412*38fd1498Szrj // ... 413*38fd1498Szrj }; 414*38fd1498Szrj 415*38fd1498Szrj The derivation from tuple contains a TYPE_PACK_EXPANSION for the 416*38fd1498Szrj template arguments. Its PACK_EXPANSION_PATTERN is "Values&" and its 417*38fd1498Szrj PACK_EXPANSION_PARAMETER_PACKS will contain "Values". */ 418*38fd1498SzrjDEFTREECODE (TYPE_PACK_EXPANSION, "type_pack_expansion", tcc_type, 0) 419*38fd1498Szrj 420*38fd1498Szrj/* Represents an expression that will be expanded into a list of 421*38fd1498Szrj expressions when instantiated with one or more argument packs. 422*38fd1498Szrj 423*38fd1498Szrj EXPR_PACK_EXPANSION plays precisely the same role as TYPE_PACK_EXPANSION, 424*38fd1498Szrj but will be used for expressions. */ 425*38fd1498SzrjDEFTREECODE (EXPR_PACK_EXPANSION, "expr_pack_expansion", tcc_expression, 3) 426*38fd1498Szrj 427*38fd1498Szrj/* Selects the Ith parameter out of an argument pack. This node will 428*38fd1498Szrj be used when instantiating pack expansions; see 429*38fd1498Szrj tsubst_pack_expansion. 430*38fd1498Szrj 431*38fd1498Szrj ARGUMENT_PACK_SELECT_FROM_PACK contains the *_ARGUMENT_PACK node 432*38fd1498Szrj from which the argument will be selected. 433*38fd1498Szrj 434*38fd1498Szrj ARGUMENT_PACK_SELECT_INDEX contains the index into the argument 435*38fd1498Szrj pack that will be returned by this ARGUMENT_PACK_SELECT node. The 436*38fd1498Szrj index is a machine integer. */ 437*38fd1498SzrjDEFTREECODE (ARGUMENT_PACK_SELECT, "argument_pack_select", tcc_exceptional, 0) 438*38fd1498Szrj 439*38fd1498Szrj/* Fold expressions allow the expansion of a template argument pack 440*38fd1498Szrj over a binary operator. 441*38fd1498Szrj 442*38fd1498Szrj FOLD_EXPR_MOD_P is true when the fold operation is a compound assignment 443*38fd1498Szrj operator. 444*38fd1498Szrj 445*38fd1498Szrj FOLD_EXPR_OP is an INTEGER_CST storing the tree code for the folded 446*38fd1498Szrj expression. Note that when FOLDEXPR_MOD_P is true, the operator is 447*38fd1498Szrj a compound assignment operator for that kind of expression. 448*38fd1498Szrj 449*38fd1498Szrj FOLD_EXPR_PACK is an expression containing an unexpanded parameter pack; 450*38fd1498Szrj when expanded, each term becomes an argument of the folded expression. 451*38fd1498Szrj 452*38fd1498Szrj In a BINARY_FOLD_EXPRESSION, FOLD_EXPR_INIT is the non-pack argument. */ 453*38fd1498SzrjDEFTREECODE (UNARY_LEFT_FOLD_EXPR, "unary_left_fold_expr", tcc_expression, 2) 454*38fd1498SzrjDEFTREECODE (UNARY_RIGHT_FOLD_EXPR, "unary_right_fold_expr", tcc_expression, 2) 455*38fd1498SzrjDEFTREECODE (BINARY_LEFT_FOLD_EXPR, "binary_left_fold_expr", tcc_expression, 3) 456*38fd1498SzrjDEFTREECODE (BINARY_RIGHT_FOLD_EXPR, "binary_right_fold_expr", tcc_expression, 3) 457*38fd1498Szrj 458*38fd1498Szrj 459*38fd1498Szrj/** C++ extensions. */ 460*38fd1498Szrj 461*38fd1498Szrj/* Represents a trait expression during template expansion. */ 462*38fd1498SzrjDEFTREECODE (TRAIT_EXPR, "trait_expr", tcc_exceptional, 0) 463*38fd1498Szrj 464*38fd1498Szrj/* A lambda expression. This is a C++0x extension. 465*38fd1498Szrj LAMBDA_EXPR_DEFAULT_CAPTURE_MODE is an enum for the default, which may be 466*38fd1498Szrj none. 467*38fd1498Szrj LAMBDA_EXPR_CAPTURE_LIST holds the capture-list, including `this'. 468*38fd1498Szrj LAMBDA_EXPR_THIS_CAPTURE goes straight to the capture of `this', if it exists. 469*38fd1498Szrj LAMBDA_EXPR_PENDING_PROXIES is a vector of capture proxies which need to 470*38fd1498Szrj be pushed once scope returns to the lambda. 471*38fd1498Szrj LAMBDA_EXPR_MUTABLE_P signals whether this lambda was declared mutable. */ 472*38fd1498SzrjDEFTREECODE (LAMBDA_EXPR, "lambda_expr", tcc_exceptional, 0) 473*38fd1498Szrj 474*38fd1498Szrj/* The declared type of an expression. This is a C++0x extension. 475*38fd1498Szrj DECLTYPE_TYPE_EXPR is the expression whose type we are computing. 476*38fd1498Szrj DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P states whether the 477*38fd1498Szrj expression was parsed as an id-expression or a member access 478*38fd1498Szrj expression. When false, it was parsed as a full expression. 479*38fd1498Szrj DECLTYPE_FOR_LAMBDA_CAPTURE is set if we want lambda capture semantics. 480*38fd1498Szrj DECLTYPE_FOR_LAMBDA_RETURN is set if we want lambda return deduction. */ 481*38fd1498SzrjDEFTREECODE (DECLTYPE_TYPE, "decltype_type", tcc_type, 0) 482*38fd1498Szrj 483*38fd1498Szrj/* A type designated by `__underlying_type (type)'. 484*38fd1498Szrj UNDERLYING_TYPE_TYPE is the type in question. */ 485*38fd1498SzrjDEFTREECODE (UNDERLYING_TYPE, "underlying_type", tcc_type, 0) 486*38fd1498Szrj 487*38fd1498Szrj/* A type designated by one of the bases type traits. 488*38fd1498Szrj BASES_TYPE is the type in question. */ 489*38fd1498SzrjDEFTREECODE (BASES, "bases", tcc_type, 0) 490*38fd1498Szrj 491*38fd1498Szrj/* Used to represent the template information stored by template 492*38fd1498Szrj specializations. 493*38fd1498Szrj The accessors are: 494*38fd1498Szrj TI_TEMPLATE the template declaration associated to the specialization 495*38fd1498Szrj TI_ARGS the arguments of the template specialization 496*38fd1498Szrj TI_TYPEDEFS_NEEDING_ACCESS_CHECKING the vector of typedefs used in 497*38fd1498Szrj the pattern of the template for which access check is needed at template 498*38fd1498Szrj instantiation time. */ 499*38fd1498SzrjDEFTREECODE (TEMPLATE_INFO, "template_info", tcc_exceptional, 0) 500*38fd1498Szrj 501*38fd1498Szrj/* Extensions for Concepts. */ 502*38fd1498Szrj 503*38fd1498Szrj/* Used to represent information associated with constrained declarations. */ 504*38fd1498SzrjDEFTREECODE (CONSTRAINT_INFO, "constraint_info", tcc_exceptional, 0) 505*38fd1498Szrj 506*38fd1498Szrj/* A wildcard declaration is a placeholder for a template parameter 507*38fd1498Szrj used to resolve constrained-type-names in concepts. During 508*38fd1498Szrj resolution, the matching argument is saved as the TREE_TYPE 509*38fd1498Szrj of the wildcard. */ 510*38fd1498SzrjDEFTREECODE (WILDCARD_DECL, "wildcard_decl", tcc_declaration, 0) 511*38fd1498Szrj 512*38fd1498Szrj/* A requires-expr is a binary expression. The first operand is 513*38fd1498Szrj its parameter list (possibly NULL). The second is a list of 514*38fd1498Szrj requirements, which are denoted by the _REQ* tree codes 515*38fd1498Szrj below. */ 516*38fd1498SzrjDEFTREECODE (REQUIRES_EXPR, "requires_expr", tcc_expression, 2) 517*38fd1498Szrj 518*38fd1498Szrj/* A requirement for an expression. */ 519*38fd1498SzrjDEFTREECODE (SIMPLE_REQ, "simple_req", tcc_expression, 1) 520*38fd1498Szrj 521*38fd1498Szrj/* A requirement for a type. */ 522*38fd1498SzrjDEFTREECODE (TYPE_REQ, "type_req", tcc_expression, 1) 523*38fd1498Szrj 524*38fd1498Szrj/* A requirement for an expression and its properties. The 525*38fd1498Szrj first operand is the expression, and the 2nd is its type. 526*38fd1498Szrj The accessor COMPOUND_REQ_NOEXCEPT determines whether 527*38fd1498Szrj the noexcept keyword was present. */ 528*38fd1498SzrjDEFTREECODE (COMPOUND_REQ, "compound_req", tcc_expression, 2) 529*38fd1498Szrj 530*38fd1498Szrj/* A requires clause within a requires expression. */ 531*38fd1498SzrjDEFTREECODE (NESTED_REQ, "nested_req", tcc_expression, 1) 532*38fd1498Szrj 533*38fd1498Szrj/* Constraints are modeled as kinds of expressions. 534*38fd1498Szrj The operands of a constraint can be either types or expressions. 535*38fd1498Szrj Unlike expressions, constraints do not have a type. */ 536*38fd1498Szrj 537*38fd1498Szrj/* A predicate constraint evaluates an expression E. 538*38fd1498Szrj 539*38fd1498Szrj PRED_CONSTR_EXPR has the expression to be evaluated. */ 540*38fd1498SzrjDEFTREECODE (PRED_CONSTR, "pred_constr", tcc_expression, 1) 541*38fd1498Szrj 542*38fd1498Szrj/* A check constraint represents the checking of a concept 543*38fd1498Szrj C. It has two operands: the template defining the concept 544*38fd1498Szrj and a sequence of template arguments. 545*38fd1498Szrj 546*38fd1498Szrj CHECK_CONSTR_CONCEPT has the concept definition 547*38fd1498Szrj CHECK_CONSTR_ARGUMENTS are the template arguments */ 548*38fd1498SzrjDEFTREECODE (CHECK_CONSTR, "check_constr", tcc_expression, 2) 549*38fd1498Szrj 550*38fd1498Szrj/* An expression constraint determines the validity of a expression E. 551*38fd1498Szrj 552*38fd1498Szrj EXPR_CONST_EXPR has the expression being validated. */ 553*38fd1498SzrjDEFTREECODE (EXPR_CONSTR, "expr_constr", tcc_expression, 1) 554*38fd1498Szrj 555*38fd1498Szrj/* A type constraint determines the validity of a type T. Note that 556*38fd1498Szrj 557*38fd1498Szrj TYPE_CONST_TYPE has the type being validated */ 558*38fd1498SzrjDEFTREECODE (TYPE_CONSTR, "type_constr", tcc_expression, 1) 559*38fd1498Szrj 560*38fd1498Szrj/* An implicit conversion constraint determines if an expression 561*38fd1498Szrj E is implicitly convertible to a type T. Note that T may 562*38fd1498Szrj be dependent but does not contain any placeholders. 563*38fd1498Szrj 564*38fd1498Szrj ICONV_CONSTR_EXPR has the expression E. 565*38fd1498Szrj ICONV_CONSTR_TYPE has the type T. 566*38fd1498Szrj */ 567*38fd1498SzrjDEFTREECODE (ICONV_CONSTR, "iconv_constr", tcc_expression, 2) 568*38fd1498Szrj 569*38fd1498Szrj/* An argument deduction constraint determines if the type of an 570*38fd1498Szrj expression E can be deduced from a type pattern T. Note that 571*38fd1498Szrj T must contain at least one place holder. 572*38fd1498Szrj 573*38fd1498Szrj DEDUCT_CONSTR_EXPR has the expression E 574*38fd1498Szrj DEDUCT_CONSTR_PATTERN has the type pattern T. 575*38fd1498Szrj DEDUCT_CONSTR_PLACEHOLDERS has the list of placeholder nodes in T. */ 576*38fd1498SzrjDEFTREECODE (DEDUCT_CONSTR, "deduct_constr", tcc_expression, 3) 577*38fd1498Szrj 578*38fd1498Szrj/* An exception constraint determines if, for an expression E, 579*38fd1498Szrj noexcept(E) is true. 580*38fd1498Szrj 581*38fd1498Szrj EXCEPT_CONSTR_EXPR has the expression E. */ 582*38fd1498SzrjDEFTREECODE (EXCEPT_CONSTR, "except_constr", tcc_expression, 1) 583*38fd1498Szrj 584*38fd1498Szrj/* A parameterized constraint declares constraint variables, which 585*38fd1498Szrj are used in expression, type, and exception constraints. 586*38fd1498Szrj 587*38fd1498Szrj PARM_CONSTR_PARMS has a TREE_LIST of parameter declarations. 588*38fd1498Szrj PARM_CONSTR_OPERAND has the nested constraint. */ 589*38fd1498SzrjDEFTREECODE (PARM_CONSTR, "parm_constr", tcc_expression, 2) 590*38fd1498Szrj 591*38fd1498Szrj/* The conjunction and disjunction of two constraints, respectively. 592*38fd1498Szrj Operands are accessed using TREE_OPERAND. */ 593*38fd1498SzrjDEFTREECODE (CONJ_CONSTR, "conj_constr", tcc_expression, 2) 594*38fd1498SzrjDEFTREECODE (DISJ_CONSTR, "disj_constr", tcc_expression, 2) 595*38fd1498Szrj 596*38fd1498Szrj 597*38fd1498Szrj/* 598*38fd1498SzrjLocal variables: 599*38fd1498Szrjmode:c 600*38fd1498SzrjEnd: 601*38fd1498Szrj*/ 602