Lines Matching refs:NODE

590 #define VAR_OR_FUNCTION_DECL_CHECK(NODE) \
591 TREE_CHECK2(NODE,VAR_DECL,FUNCTION_DECL)
593 #define TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK(NODE) \
594 TREE_CHECK3(NODE,TYPE_DECL,TEMPLATE_DECL,FUNCTION_DECL)
596 #define TYPE_FUNCTION_OR_TEMPLATE_DECL_P(NODE) \
597 (TREE_CODE (NODE) == TYPE_DECL || TREE_CODE (NODE) == TEMPLATE_DECL \
598 || TREE_CODE (NODE) == FUNCTION_DECL)
600 #define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) \
601 TREE_CHECK3(NODE,VAR_DECL,FUNCTION_DECL,PARM_DECL)
603 #define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) \
604 TREE_CHECK4(NODE,VAR_DECL,FUNCTION_DECL,TYPE_DECL,TEMPLATE_DECL)
606 #define VAR_TEMPL_TYPE_FIELD_OR_FUNCTION_DECL_CHECK(NODE) \
607 TREE_CHECK5(NODE,VAR_DECL,FIELD_DECL,FUNCTION_DECL,TYPE_DECL,TEMPLATE_DECL)
609 #define BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK(NODE) \
610 TREE_CHECK(NODE,BOUND_TEMPLATE_TEMPLATE_PARM)
637 #define TEMPLATE_INFO_DECL_CHECK(NODE) \
638 template_info_decl_check ((NODE), __FILE__, __LINE__, __FUNCTION__)
640 #define THUNK_FUNCTION_CHECK(NODE) __extension__ \
641 ({ __typeof (NODE) const __t = (NODE); \
649 #define TEMPLATE_INFO_DECL_CHECK(NODE) (NODE)
650 #define THUNK_FUNCTION_CHECK(NODE) (NODE)
672 #define LANG_IDENTIFIER_CAST(NODE) \
673 ((struct lang_identifier*)IDENTIFIER_NODE_CHECK (NODE))
689 #define CLEANUP_P(NODE) TREE_LANG_FLAG_0 (TRY_BLOCK_CHECK (NODE))
691 #define BIND_EXPR_TRY_BLOCK(NODE) \
692 TREE_LANG_FLAG_0 (BIND_EXPR_CHECK (NODE))
695 #define BIND_EXPR_BODY_BLOCK(NODE) \
696 TREE_LANG_FLAG_3 (BIND_EXPR_CHECK (NODE))
697 #define FUNCTION_NEEDS_BODY_BLOCK(NODE) \
698 (DECL_CONSTRUCTOR_P (NODE) || DECL_DESTRUCTOR_P (NODE) \
699 || LAMBDA_FUNCTION_P (NODE))
701 #define STATEMENT_LIST_NO_SCOPE(NODE) \
702 TREE_LANG_FLAG_0 (STATEMENT_LIST_CHECK (NODE))
703 #define STATEMENT_LIST_TRY_BLOCK(NODE) \
704 TREE_LANG_FLAG_2 (STATEMENT_LIST_CHECK (NODE))
707 #define BLOCK_OUTER_CURLY_BRACE_P(NODE) TREE_LANG_FLAG_0 (BLOCK_CHECK (NODE))
712 #define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE))
715 #define EXPR_STMT_STMT_EXPR_RESULT(NODE) \
716 TREE_LANG_FLAG_0 (EXPR_STMT_CHECK (NODE))
719 #define STMT_EXPR_NO_SCOPE(NODE) \
720 TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
722 #define COND_EXPR_IS_VEC_DELETE(NODE) \
723 TREE_LANG_FLAG_0 (COND_EXPR_CHECK (NODE))
727 #define REINTERPRET_CAST_P(NODE) \
728 TREE_LANG_FLAG_0 (NOP_EXPR_CHECK (NODE))
735 /* Returns nonzero iff NODE is a declaration for the global function
737 #define DECL_MAIN_P(NODE) \
738 (DECL_EXTERN_C_FUNCTION_P (NODE) \
739 && DECL_NAME (NODE) != NULL_TREE \
740 && MAIN_NAME_P (DECL_NAME (NODE)) \
744 #define LOOKUP_SEEN_P(NODE) TREE_VISITED(NODE)
745 #define LOOKUP_FOUND_P(NODE) \
746 TREE_LANG_FLAG_4 (TREE_CHECK3(NODE,RECORD_TYPE,UNION_TYPE,NAMESPACE_DECL))
750 #define OVL_FUNCTION(NODE) \
751 (((struct tree_overload*)OVERLOAD_CHECK (NODE))->function)
752 #define OVL_CHAIN(NODE) \
753 (((struct tree_overload*)OVERLOAD_CHECK (NODE))->common.chain)
756 #define OVL_DEDUP_P(NODE) TREE_LANG_FLAG_0 (OVERLOAD_CHECK (NODE))
758 #define OVL_USING_P(NODE) TREE_LANG_FLAG_1 (OVERLOAD_CHECK (NODE))
760 #define OVL_HIDDEN_P(NODE) TREE_LANG_FLAG_2 (OVERLOAD_CHECK (NODE))
762 #define OVL_NESTED_P(NODE) TREE_LANG_FLAG_3 (OVERLOAD_CHECK (NODE))
764 #define OVL_LOOKUP_P(NODE) TREE_LANG_FLAG_4 (OVERLOAD_CHECK (NODE))
767 #define OVL_FIRST(NODE) ovl_first (NODE)
769 #define OVL_NAME(NODE) DECL_NAME (OVL_FIRST (NODE))
774 #define OVL_P(NODE) \
775 (TREE_CODE (NODE) == FUNCTION_DECL || TREE_CODE (NODE) == OVERLOAD)
777 #define OVL_SINGLE_P(NODE) \
778 (TREE_CODE (NODE) != OVERLOAD || !OVL_CHAIN (NODE))
974 /* Returns true iff NODE is a BASELINK. */
975 #define BASELINK_P(NODE) \
976 (TREE_CODE (NODE) == BASELINK)
979 #define BASELINK_BINFO(NODE) \
980 (((struct tree_baselink*) BASELINK_CHECK (NODE))->binfo)
983 #define BASELINK_FUNCTIONS(NODE) \
984 (((struct tree_baselink*) BASELINK_CHECK (NODE))->functions)
992 #define BASELINK_ACCESS_BINFO(NODE) \
993 (((struct tree_baselink*) BASELINK_CHECK (NODE))->access_binfo)
999 #define BASELINK_OPTYPE(NODE) \
1000 (TREE_CHAIN (BASELINK_CHECK (NODE)))
1002 #define BASELINK_QUALIFIED_P(NODE) \
1003 TREE_LANG_FLAG_0 (BASELINK_CHECK (NODE))
1127 #define IDENTIFIER_BINDING(NODE) \
1128 (LANG_IDENTIFIER_CAST (NODE)->bindings)
1134 #define IDENTIFIER_TYPE_VALUE(NODE) identifier_type_value (NODE)
1135 #define REAL_IDENTIFIER_TYPE_VALUE(NODE) TREE_TYPE (NODE)
1136 #define SET_IDENTIFIER_TYPE_VALUE(NODE,TYPE) (TREE_TYPE (NODE) = (TYPE))
1137 #define IDENTIFIER_HAS_TYPE_VALUE(NODE) (IDENTIFIER_TYPE_VALUE (NODE) ? 1 : 0)
1154 #define IDENTIFIER_KIND_BIT_0(NODE) \
1155 TREE_LANG_FLAG_0 (IDENTIFIER_NODE_CHECK (NODE))
1156 #define IDENTIFIER_KIND_BIT_1(NODE) \
1157 TREE_LANG_FLAG_1 (IDENTIFIER_NODE_CHECK (NODE))
1158 #define IDENTIFIER_KIND_BIT_2(NODE) \
1159 TREE_LANG_FLAG_2 (IDENTIFIER_NODE_CHECK (NODE))
1162 #define IDENTIFIER_MARKED(NODE) \
1163 TREE_LANG_FLAG_4 (IDENTIFIER_NODE_CHECK (NODE))
1167 #define IDENTIFIER_VIRTUAL_P(NODE) \
1168 TREE_LANG_FLAG_5 (IDENTIFIER_NODE_CHECK (NODE))
1172 #define IDENTIFIER_KEYWORD_P(NODE) \
1173 ((!IDENTIFIER_KIND_BIT_2 (NODE)) \
1174 & (!IDENTIFIER_KIND_BIT_1 (NODE)) \
1175 & IDENTIFIER_KIND_BIT_0 (NODE))
1179 #define IDENTIFIER_CDTOR_P(NODE) \
1180 ((!IDENTIFIER_KIND_BIT_2 (NODE)) \
1181 & IDENTIFIER_KIND_BIT_1 (NODE))
1184 #define IDENTIFIER_CTOR_P(NODE) \
1185 (IDENTIFIER_CDTOR_P(NODE) \
1186 & (!IDENTIFIER_KIND_BIT_0 (NODE)))
1189 #define IDENTIFIER_DTOR_P(NODE) \
1190 (IDENTIFIER_CDTOR_P(NODE) \
1191 & IDENTIFIER_KIND_BIT_0 (NODE))
1195 #define IDENTIFIER_ANY_OP_P(NODE) \
1196 (IDENTIFIER_KIND_BIT_2 (NODE))
1199 #define IDENTIFIER_OVL_OP_P(NODE) \
1200 (IDENTIFIER_ANY_OP_P (NODE) \
1201 & (!IDENTIFIER_KIND_BIT_1 (NODE)))
1204 #define IDENTIFIER_ASSIGN_OP_P(NODE) \
1205 (IDENTIFIER_OVL_OP_P (NODE) \
1206 & IDENTIFIER_KIND_BIT_0 (NODE))
1210 #define IDENTIFIER_CONV_OP_P(NODE) \
1211 (IDENTIFIER_ANY_OP_P (NODE) \
1212 & IDENTIFIER_KIND_BIT_1 (NODE) \
1213 & (!IDENTIFIER_KIND_BIT_0 (NODE)))
1216 #define IDENTIFIER_NEWDEL_OP_P(NODE) \
1217 (IDENTIFIER_OVL_OP_P (NODE) \
1218 && IDENTIFIER_OVL_OP_FLAGS (NODE) & OVL_OP_FLAG_ALLOC)
1221 #define IDENTIFIER_NEW_OP_P(NODE) \
1222 (IDENTIFIER_OVL_OP_P (NODE) \
1223 && (IDENTIFIER_OVL_OP_FLAGS (NODE) \
1226 /* Access a C++-specific index for identifier NODE.
1228 #define IDENTIFIER_CP_INDEX(NODE) \
1229 (IDENTIFIER_NODE_CHECK(NODE)->base.u.bits.address_space)
1237 #define DEFPARSE_TOKENS(NODE) \
1238 (((struct tree_deferred_parse *)DEFERRED_PARSE_CHECK (NODE))->tokens)
1239 #define DEFPARSE_INSTANTIATIONS(NODE) \
1240 (((struct tree_deferred_parse *)DEFERRED_PARSE_CHECK (NODE))->instantiations)
1249 #define DEFERRED_NOEXCEPT_PATTERN(NODE) \
1250 (((struct tree_deferred_noexcept *)DEFERRED_NOEXCEPT_CHECK (NODE))->pattern)
1251 #define DEFERRED_NOEXCEPT_ARGS(NODE) \
1252 (((struct tree_deferred_noexcept *)DEFERRED_NOEXCEPT_CHECK (NODE))->args)
1253 #define DEFERRED_NOEXCEPT_SPEC_P(NODE) \
1254 ((NODE) && (TREE_PURPOSE (NODE)) \
1255 && (TREE_CODE (TREE_PURPOSE (NODE)) == DEFERRED_NOEXCEPT))
1256 #define UNEVALUATED_NOEXCEPT_SPEC_P(NODE) \
1257 (DEFERRED_NOEXCEPT_SPEC_P (NODE) \
1258 && DEFERRED_NOEXCEPT_PATTERN (TREE_PURPOSE (NODE)) == NULL_TREE)
1259 #define UNPARSED_NOEXCEPT_SPEC_P(NODE) \
1260 ((NODE) && (TREE_PURPOSE (NODE)) \
1261 && (TREE_CODE (TREE_PURPOSE (NODE)) == DEFERRED_PARSE))
1272 #define STATIC_ASSERT_CONDITION(NODE) \
1273 (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->condition)
1278 #define STATIC_ASSERT_MESSAGE(NODE) \
1279 (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->message)
1282 #define STATIC_ASSERT_SOURCE_LOCATION(NODE) \
1283 (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->location)
1336 #define TRAIT_EXPR_TYPE1(NODE) \
1337 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->type1)
1339 #define TRAIT_EXPR_TYPE2(NODE) \
1340 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->type2)
1343 #define TRAIT_EXPR_KIND(NODE) \
1344 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->kind)
1346 #define TRAIT_EXPR_LOCATION(NODE) \
1347 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->locus)
1359 #define IDENTIFIER_LAMBDA_P(NODE) \
1360 (IDENTIFIER_NODE_CHECK(NODE)->base.protected_flag)
1363 #define LAMBDA_TYPE_P(NODE) \
1364 (TREE_CODE (NODE) == RECORD_TYPE \
1365 && TYPE_LINKAGE_IDENTIFIER (NODE) \
1366 && IDENTIFIER_LAMBDA_P (TYPE_LINKAGE_IDENTIFIER (NODE)))
1382 #define LAMBDA_EXPR_DEFAULT_CAPTURE_MODE(NODE) \
1383 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->default_capture_mode)
1391 #define LAMBDA_EXPR_CAPTURE_LIST(NODE) \
1392 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->capture_list)
1397 #define LAMBDA_EXPR_THIS_CAPTURE(NODE) \
1398 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->this_capture)
1401 #define LAMBDA_EXPR_CAPTURES_THIS_P(NODE) \
1402 LAMBDA_EXPR_THIS_CAPTURE(NODE)
1405 #define LAMBDA_EXPR_MUTABLE_P(NODE) \
1406 TREE_LANG_FLAG_1 (LAMBDA_EXPR_CHECK (NODE))
1409 #define LAMBDA_EXPR_CAPTURE_OPTIMIZED(NODE) \
1410 TREE_LANG_FLAG_2 (LAMBDA_EXPR_CHECK (NODE))
1413 #define LAMBDA_EXPR_INSTANTIATED(NODE) \
1414 TREE_LANG_FLAG_3 (LAMBDA_EXPR_CHECK (NODE))
1418 #define LAMBDA_CAPTURE_EXPLICIT_P(NODE) \
1419 TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
1422 #define LAMBDA_EXPR_LOCATION(NODE) \
1423 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->locus)
1427 #define LAMBDA_EXPR_EXTRA_SCOPE(NODE) \
1428 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->extra_scope)
1431 #define LAMBDA_EXPR_DISCRIMINATOR(NODE) \
1432 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->discriminator)
1436 #define LAMBDA_EXPR_PENDING_PROXIES(NODE) \
1437 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->pending_proxies)
1441 #define LAMBDA_EXPR_CLOSURE(NODE) \
1442 (TREE_TYPE (LAMBDA_EXPR_CHECK (NODE)))
1480 #define TINFO_HAS_ACCESS_ERRORS(NODE) \
1481 (TREE_LANG_FLAG_0 (TEMPLATE_INFO_CHECK (NODE)))
1482 #define FNDECL_HAS_ACCESS_ERRORS(NODE) \
1483 (TINFO_HAS_ACCESS_ERRORS (DECL_TEMPLATE_INFO (NODE)))
1488 #define TINFO_USED_TEMPLATE_ID(NODE) \
1489 (TREE_LANG_FLAG_1 (TEMPLATE_INFO_CHECK (NODE)))
1493 #define TINFO_VAR_DECLARED_CONSTINIT(NODE) \
1494 (TREE_LANG_FLAG_2 (TEMPLATE_INFO_CHECK (NODE)))
1542 #define CI_TEMPLATE_REQS(NODE) \
1543 check_constraint_info (check_nonnull (NODE))->template_reqs
1549 #define CI_DECLARATOR_REQS(NODE) \
1550 check_constraint_info (check_nonnull (NODE))->declarator_reqs
1553 #define CI_ASSOCIATED_CONSTRAINTS(NODE) \
1554 check_constraint_info (check_nonnull (NODE))->associated_constr
1557 associate the template parameter list NODE. */
1558 #define TEMPLATE_PARMS_CONSTRAINTS(NODE) \
1559 TREE_TYPE (TREE_LIST_CHECK (NODE))
1562 indicated by NODE. */
1563 #define TEMPLATE_PARM_CONSTRAINTS(NODE) \
1564 TREE_TYPE (TREE_LIST_CHECK (NODE))
1567 #define COMPOUND_REQ_NOEXCEPT_P(NODE) \
1568 TREE_LANG_FLAG_0 (TREE_CHECK (NODE, COMPOUND_REQ))
1572 #define PLACEHOLDER_TYPE_CONSTRAINTS(NODE) \
1573 DECL_SIZE_UNIT (TYPE_NAME (NODE))
1575 /* True if NODE is a constraint. */
1576 #define CONSTR_P(NODE) \
1577 (TREE_CODE (NODE) == ATOMIC_CONSTR \
1578 || TREE_CODE (NODE) == CONJ_CONSTR \
1579 || TREE_CODE (NODE) == DISJ_CONSTR)
1582 #define CONSTR_CHECK(NODE) \
1583 TREE_CHECK3 (NODE, ATOMIC_CONSTR, CONJ_CONSTR, DISJ_CONSTR)
1591 #define CONSTR_INFO(NODE) \
1592 TREE_TYPE (CONSTR_CHECK (NODE))
1595 #define CONSTR_EXPR(NODE) \
1596 TREE_PURPOSE (CONSTR_INFO (NODE))
1602 #define CONSTR_CONTEXT(NODE) \
1603 TREE_VALUE (CONSTR_INFO (NODE))
1606 #define ATOMIC_CONSTR_MAP(NODE) \
1607 TREE_OPERAND (TREE_CHECK (NODE, ATOMIC_CONSTR), 0)
1610 #define ATOMIC_CONSTR_EXPR(NODE) \
1611 CONSTR_EXPR (ATOMIC_CONSTR_CHECK (NODE))
1614 #define CHECK_CONSTR_CONCEPT(NODE) \
1615 TREE_OPERAND (TREE_CHECK (NODE, CHECK_CONSTR), 0)
1618 #define CHECK_CONSTR_ARGS(NODE) \
1619 TREE_OPERAND (TREE_CHECK (NODE, CHECK_CONSTR), 1)
1623 #define CONSTRAINT_VAR_P(NODE) \
1624 DECL_LANG_FLAG_2 (TREE_CHECK (NODE, PARM_DECL))
1627 #define CONSTRAINED_PARM_CONCEPT(NODE) \
1628 DECL_SIZE_UNIT (TYPE_DECL_CHECK (NODE))
1631 #define CONSTRAINED_PARM_EXTRA_ARGS(NODE) \
1632 DECL_SIZE (TYPE_DECL_CHECK (NODE))
1636 #define CONSTRAINED_PARM_PROTOTYPE(NODE) \
1637 DECL_INITIAL (TYPE_DECL_CHECK (NODE))
2019 #define NON_ERROR(NODE) ((NODE) == error_mark_node ? NULL_TREE : (NODE))
2029 #define TYPE_LINKAGE_IDENTIFIER(NODE) \
2030 (TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (NODE)))
2031 #define TYPE_NAME_STRING(NODE) (IDENTIFIER_POINTER (TYPE_IDENTIFIER (NODE)))
2032 #define TYPE_NAME_LENGTH(NODE) (IDENTIFIER_LENGTH (TYPE_IDENTIFIER (NODE)))
2035 #define TYPE_ANON_P(NODE) \
2036 (TYPE_LINKAGE_IDENTIFIER (NODE) \
2037 && IDENTIFIER_ANON_P (TYPE_LINKAGE_IDENTIFIER (NODE)))
2039 /* Nonzero if NODE, a TYPE, has no name for linkage purposes. */
2040 #define TYPE_UNNAMED_P(NODE) \
2041 (TYPE_ANON_P (NODE) \
2042 && !IDENTIFIER_LAMBDA_P (TYPE_LINKAGE_IDENTIFIER (NODE)))
2045 #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
2084 #define TYPE_DEPENDENT_P(NODE) TYPE_LANG_FLAG_0 (NODE)
2088 #define TYPE_DEPENDENT_P_VALID(NODE) TYPE_LANG_FLAG_6(NODE)
2091 #define CP_TYPE_CONST_P(NODE) \
2092 ((cp_type_quals (NODE) & TYPE_QUAL_CONST) != 0)
2095 #define CP_TYPE_VOLATILE_P(NODE) \
2096 ((cp_type_quals (NODE) & TYPE_QUAL_VOLATILE) != 0)
2099 #define CP_TYPE_RESTRICT_P(NODE) \
2100 ((cp_type_quals (NODE) & TYPE_QUAL_RESTRICT) != 0)
2106 #define CP_TYPE_CONST_NON_VOLATILE_P(NODE) \
2107 ((cp_type_quals (NODE) & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)) \
2110 #define FUNCTION_ARG_CHAIN(NODE) \
2111 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (NODE)))
2115 #define FUNCTION_FIRST_USER_PARMTYPE(NODE) \
2116 skip_artificial_parms_for ((NODE), TYPE_ARG_TYPES (TREE_TYPE (NODE)))
2119 #define FUNCTION_FIRST_USER_PARM(NODE) \
2120 skip_artificial_parms_for ((NODE), DECL_ARGUMENTS (NODE))
2244 #define LANG_TYPE_CLASS_CHECK(NODE) (TYPE_LANG_SPECIFIC (NODE))
2247 #define TYPE_GETS_DELETE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->gets_delete)
2248 #define TYPE_GETS_REG_DELETE(NODE) (TYPE_GETS_DELETE (NODE) & 1)
2250 /* Nonzero if `new NODE[x]' should cause the allocation of extra
2252 #define TYPE_VEC_NEW_USES_COOKIE(NODE) \
2253 (CLASS_TYPE_P (NODE) \
2254 && LANG_TYPE_CLASS_CHECK (NODE)->vec_new_uses_cookie)
2258 #define TYPE_HAS_CONVERSION(NODE) \
2259 (LANG_TYPE_CLASS_CHECK (NODE)->has_type_conversion)
2261 /* Nonzero means that NODE (a class type) has a default constructor --
2263 #define CLASSTYPE_LAZY_DEFAULT_CTOR(NODE) \
2264 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_default_ctor)
2266 /* Nonzero means that NODE (a class type) has a copy constructor --
2268 #define CLASSTYPE_LAZY_COPY_CTOR(NODE) \
2269 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_copy_ctor)
2271 /* Nonzero means that NODE (a class type) has a move constructor --
2273 #define CLASSTYPE_LAZY_MOVE_CTOR(NODE) \
2274 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_move_ctor)
2276 /* Nonzero means that NODE (a class type) has an assignment operator
2278 #define CLASSTYPE_LAZY_COPY_ASSIGN(NODE) \
2279 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_copy_assign)
2281 /* Nonzero means that NODE (a class type) has an assignment operator
2283 #define CLASSTYPE_LAZY_MOVE_ASSIGN(NODE) \
2284 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_move_assign)
2286 /* Nonzero means that NODE (a class type) has a destructor -- but that
2288 #define CLASSTYPE_LAZY_DESTRUCTOR(NODE) \
2289 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_destructor)
2291 /* Nonzero means that NODE (a class type) is final */
2292 #define CLASSTYPE_FINAL(NODE) \
2293 TYPE_FINAL_P (NODE)
2297 #define TYPE_HAS_COPY_ASSIGN(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_copy_assign)
2299 /* True iff the class type NODE has an "operator =" whose parameter
2301 #define TYPE_HAS_CONST_COPY_ASSIGN(NODE) \
2302 (LANG_TYPE_CLASS_CHECK (NODE)->has_const_copy_assign)
2305 #define TYPE_HAS_COPY_CTOR(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_copy_ctor)
2306 #define TYPE_HAS_CONST_COPY_CTOR(NODE) \
2307 (LANG_TYPE_CLASS_CHECK (NODE)->has_const_copy_ctor)
2310 #define TYPE_HAS_LIST_CTOR(NODE) \
2311 (LANG_TYPE_CLASS_CHECK (NODE)->has_list_ctor)
2316 #define TYPE_HAS_CONSTEXPR_CTOR(NODE) \
2317 (LANG_TYPE_CLASS_CHECK (NODE)->has_constexpr_ctor)
2321 #define TYPE_HAS_NEW_OPERATOR(NODE) \
2322 (LANG_TYPE_CLASS_CHECK (NODE)->has_new)
2325 #define TYPE_HAS_ARRAY_NEW_OPERATOR(NODE) \
2326 (LANG_TYPE_CLASS_CHECK (NODE)->has_array_new)
2330 #define TYPE_BEING_DEFINED(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->being_defined)
2334 #define COMPLETE_OR_OPEN_TYPE_P(NODE) \
2335 (COMPLETE_TYPE_P (NODE) || (CLASS_TYPE_P (NODE) && TYPE_BEING_DEFINED (NODE)))
2338 #define TYPE_MARKED_P(NODE) TREE_LANG_FLAG_6 (TYPE_CHECK (NODE))
2340 /* Nonzero if the class NODE has multiple paths to the same (virtual)
2342 #define CLASSTYPE_DIAMOND_SHAPED_P(NODE) \
2343 (LANG_TYPE_CLASS_CHECK(NODE)->diamond_shaped)
2345 /* Nonzero if the class NODE has multiple instances of the same base
2347 #define CLASSTYPE_REPEATED_BASE_P(NODE) \
2348 (LANG_TYPE_CLASS_CHECK(NODE)->repeated_base)
2353 #define CLASSTYPE_KEY_METHOD(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->key_method)
2359 #define CLASSTYPE_MEMBER_VEC(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->members)
2365 #define CLASSTYPE_DECL_LIST(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->decl_list)
2367 /* A FUNCTION_DECL or OVERLOAD for the constructors for NODE. These
2369 #define CLASSTYPE_CONSTRUCTORS(NODE) \
2370 (get_class_binding_direct (NODE, ctor_identifier))
2372 /* A FUNCTION_DECL for the destructor for NODE. This is the
2376 #define CLASSTYPE_DESTRUCTOR(NODE) \
2377 (get_class_binding_direct (NODE, dtor_identifier))
2382 #define CLASSTYPE_NESTED_UTDS(NODE) \
2383 (LANG_TYPE_CLASS_CHECK (NODE)->nested_udts)
2385 /* Nonzero if NODE has a primary base class, i.e., a base class with
2387 #define CLASSTYPE_HAS_PRIMARY_BASE_P(NODE) \
2388 (CLASSTYPE_PRIMARY_BINFO (NODE) != NULL_TREE)
2393 #define CLASSTYPE_PRIMARY_BINFO(NODE) \
2394 (LANG_TYPE_CLASS_CHECK (NODE)->primary_base)
2400 #define CLASSTYPE_VBASECLASSES(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->vbases)
2402 /* The type corresponding to NODE when NODE is used as a base class,
2403 i.e., NODE without virtual base classes or tail padding. */
2404 #define CLASSTYPE_AS_BASE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->as_base)
2406 /* True iff NODE is the CLASSTYPE_AS_BASE version of some type. */
2407 #define IS_FAKE_BASE_TYPE(NODE) \
2408 (TREE_CODE (NODE) == RECORD_TYPE \
2409 && TYPE_CONTEXT (NODE) && CLASS_TYPE_P (TYPE_CONTEXT (NODE)) \
2410 && CLASSTYPE_AS_BASE (TYPE_CONTEXT (NODE)) == (NODE))
2414 #define CLASSTYPE_SIZE(NODE) TYPE_SIZE (CLASSTYPE_AS_BASE (NODE))
2415 #define CLASSTYPE_SIZE_UNIT(NODE) TYPE_SIZE_UNIT (CLASSTYPE_AS_BASE (NODE))
2416 #define CLASSTYPE_ALIGN(NODE) TYPE_ALIGN (CLASSTYPE_AS_BASE (NODE))
2417 #define CLASSTYPE_USER_ALIGN(NODE) TYPE_USER_ALIGN (CLASSTYPE_AS_BASE (NODE))
2419 /* The alignment of NODE, without its virtual bases, in bytes. */
2420 #define CLASSTYPE_ALIGN_UNIT(NODE) \
2421 (CLASSTYPE_ALIGN (NODE) / BITS_PER_UNIT)
2426 #define CLASSTYPE_PURE_VIRTUALS(NODE) \
2427 (LANG_TYPE_CLASS_CHECK (NODE)->pure_virtuals)
2430 #define ABSTRACT_CLASS_TYPE_P(NODE) \
2431 (CLASS_TYPE_P (NODE) && CLASSTYPE_PURE_VIRTUALS(NODE))
2434 #define TYPE_HAS_DEFAULT_CONSTRUCTOR(NODE) \
2435 (LANG_TYPE_CLASS_CHECK (NODE)->has_default_ctor)
2438 #define CLASSTYPE_HAS_MUTABLE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_mutable)
2439 #define TYPE_HAS_MUTABLE_P(NODE) (cp_has_mutable_p (NODE))
2443 #define CLASSTYPE_NON_LAYOUT_POD_P(NODE) \
2444 (LANG_TYPE_CLASS_CHECK (NODE)->non_pod_class)
2447 #define CLASSTYPE_NON_STD_LAYOUT(NODE) \
2448 (LANG_TYPE_CLASS_CHECK (NODE)->non_std_layout)
2452 #define CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS(NODE) \
2453 (LANG_TYPE_CLASS_CHECK (NODE)->unique_obj_representations)
2457 #define CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS_SET(NODE) \
2458 (LANG_TYPE_CLASS_CHECK (NODE)->unique_obj_representations_set)
2463 #define CLASSTYPE_NON_ZERO_INIT_P(NODE) \
2464 (LANG_TYPE_CLASS_CHECK (NODE)->non_zero_init)
2467 #define CLASSTYPE_EMPTY_P(NODE) \
2468 (LANG_TYPE_CLASS_CHECK (NODE)->empty_p)
2472 #define CLASSTYPE_NEARLY_EMPTY_P(NODE) \
2473 (LANG_TYPE_CLASS_CHECK (NODE)->nearly_empty_p)
2476 #define CLASSTYPE_CONTAINS_EMPTY_CLASS_P(NODE) \
2477 (LANG_TYPE_CLASS_CHECK (NODE)->contains_empty_class_p)
2482 #define CLASSTYPE_FRIEND_CLASSES(NODE) \
2483 (LANG_TYPE_CLASS_CHECK (NODE)->friend_classes)
2486 #define CLASSTYPE_BEFRIENDING_CLASSES(NODE) \
2487 (LANG_TYPE_CLASS_CHECK (NODE)->befriending_classes)
2490 #define CLASSTYPE_LAMBDA_EXPR(NODE) \
2491 (LANG_TYPE_CLASS_CHECK (NODE)->lambda_expr)
2493 #define LAMBDA_TYPE_EXTRA_SCOPE(NODE) \
2494 (LAMBDA_EXPR_EXTRA_SCOPE (CLASSTYPE_LAMBDA_EXPR (NODE)))
2497 #define CLASSTYPE_DECLARED_CLASS(NODE) \
2498 (LANG_TYPE_CLASS_CHECK (NODE)->declared_class)
2502 #define CLASSTYPE_READONLY_FIELDS_NEED_INIT(NODE) \
2503 (TYPE_LANG_SPECIFIC (NODE) \
2504 ? LANG_TYPE_CLASS_CHECK (NODE)->const_needs_init : 0)
2505 #define SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT(NODE, VALUE) \
2506 (LANG_TYPE_CLASS_CHECK (NODE)->const_needs_init = (VALUE))
2510 #define CLASSTYPE_REF_FIELDS_NEED_INIT(NODE) \
2511 (TYPE_LANG_SPECIFIC (NODE) \
2512 ? LANG_TYPE_CLASS_CHECK (NODE)->ref_needs_init : 0)
2513 #define SET_CLASSTYPE_REF_FIELDS_NEED_INIT(NODE, VALUE) \
2514 (LANG_TYPE_CLASS_CHECK (NODE)->ref_needs_init = (VALUE))
2518 #define CLASSTYPE_INTERFACE_ONLY(NODE) \
2519 (LANG_TYPE_CLASS_CHECK (NODE)->interface_only)
2526 #define CLASSTYPE_INTERFACE_KNOWN(NODE) \
2527 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown == 0)
2529 #define CLASSTYPE_INTERFACE_UNKNOWN(NODE) \
2530 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown)
2532 #define SET_CLASSTYPE_INTERFACE_UNKNOWN_X(NODE,X) \
2533 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = !!(X))
2534 #define SET_CLASSTYPE_INTERFACE_UNKNOWN(NODE) \
2535 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = 1)
2536 #define SET_CLASSTYPE_INTERFACE_KNOWN(NODE) \
2537 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = 0)
2540 #define CLASSTYPE_DEBUG_REQUESTED(NODE) \
2541 (LANG_TYPE_CLASS_CHECK (NODE)->debug_requested)
2547 #define BINFO_VTABLE_PATH_MARKED(NODE) BINFO_FLAG_1 (NODE)
2571 #define BINFO_DEPENDENT_BASE_P(NODE) BINFO_FLAG_3 (NODE)
2576 #define BINFO_LOST_PRIMARY_P(NODE) BINFO_FLAG_4 (NODE)
2579 #define BINFO_PRIMARY_P(NODE) BINFO_FLAG_5(NODE)
2583 NODE. The PURPOSE of each element is a FUNCTION_DECL for a virtual
2585 vcall offset for that function is stored, when NODE is a virtual
2587 #define CLASSTYPE_VCALL_INDICES(NODE) \
2588 (LANG_TYPE_CLASS_CHECK (NODE)->vcall_indices)
2590 /* The various vtables for the class NODE. The primary vtable will be
2592 #define CLASSTYPE_VTABLES(NODE) \
2593 (LANG_TYPE_CLASS_CHECK (NODE)->vtables)
2598 #define CLASSTYPE_TYPEINFO_VAR(NODE) \
2599 (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var)
2606 #define BV_DELTA(NODE) (TREE_PURPOSE (NODE))
2611 #define BV_VCALL_INDEX(NODE) (TREE_TYPE (NODE))
2614 #define BV_FN(NODE) (TREE_VALUE (NODE))
2617 #define BV_LOST_PRIMARY(NODE) (TREE_LANG_FLAG_0 (NODE))
2628 #define TYPE_RAISES_EXCEPTIONS(NODE) \
2629 TYPE_LANG_SLOT_1 (FUNC_OR_METHOD_CHECK (NODE))
2633 #define TYPE_NOTHROW_P(NODE) nothrow_spec_p (TYPE_RAISES_EXCEPTIONS (NODE))
2635 /* For FUNCTION_TYPE or METHOD_TYPE, true if NODE is noexcept. This is the
2638 #define TYPE_NOEXCEPT_P(NODE) type_noexcept_p (NODE)
2641 #define NAMESPACE_LEVEL(NODE) \
2642 (LANG_DECL_NS_CHECK (NODE)->level)
2682 #define LANG_DECL_HAS_MIN(NODE) \
2683 (VAR_OR_FUNCTION_DECL_P (NODE) \
2684 || TREE_CODE (NODE) == FIELD_DECL \
2685 || TREE_CODE (NODE) == CONST_DECL \
2686 || TREE_CODE (NODE) == TYPE_DECL \
2687 || TREE_CODE (NODE) == TEMPLATE_DECL \
2688 || TREE_CODE (NODE) == USING_DECL \
2689 || TREE_CODE (NODE) == CONCEPT_DECL)
2823 #define STRIP_TEMPLATE(NODE) \
2824 (TREE_CODE (NODE) == TEMPLATE_DECL ? DECL_TEMPLATE_RESULT (NODE) : NODE)
2828 #define LANG_DECL_MIN_CHECK(NODE) __extension__ \
2829 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2830 if (!LANG_DECL_HAS_MIN (NODE)) \
2837 #define LANG_DECL_FN_CHECK(NODE) __extension__ \
2838 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (STRIP_TEMPLATE (NODE)); \
2839 if (!DECL_DECLARES_FUNCTION_P (NODE) \
2844 #define LANG_DECL_NS_CHECK(NODE) __extension__ \
2845 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2846 if (TREE_CODE (NODE) != NAMESPACE_DECL \
2851 #define LANG_DECL_PARM_CHECK(NODE) __extension__ \
2852 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2853 if (TREE_CODE (NODE) != PARM_DECL \
2858 #define LANG_DECL_DECOMP_CHECK(NODE) __extension__ \
2859 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2860 if (!VAR_P (NODE) \
2867 #define LANG_DECL_MIN_CHECK(NODE) \
2868 (&DECL_LANG_SPECIFIC (NODE)->u.min)
2870 #define LANG_DECL_FN_CHECK(NODE) \
2871 (&DECL_LANG_SPECIFIC (STRIP_TEMPLATE (NODE))->u.fn)
2873 #define LANG_DECL_NS_CHECK(NODE) \
2874 (&DECL_LANG_SPECIFIC (NODE)->u.ns)
2876 #define LANG_DECL_PARM_CHECK(NODE) \
2877 (&DECL_LANG_SPECIFIC (NODE)->u.parm)
2879 #define LANG_DECL_DECOMP_CHECK(NODE) \
2880 (&DECL_LANG_SPECIFIC (NODE)->u.decomp)
2893 #define DECL_LANGUAGE(NODE) \
2894 (DECL_LANG_SPECIFIC (NODE) \
2895 ? DECL_LANG_SPECIFIC (NODE)->u.base.language \
2896 : (TREE_CODE (NODE) == FUNCTION_DECL \
2899 /* Set the language linkage for NODE to LANGUAGE. */
2900 #define SET_DECL_LANGUAGE(NODE, LANGUAGE) \
2901 (DECL_LANG_SPECIFIC (NODE)->u.base.language = (LANGUAGE))
2905 #define DECL_CONSTRUCTOR_P(NODE) \
2906 DECL_CXX_CONSTRUCTOR_P (STRIP_TEMPLATE (NODE))
2908 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a complete
2910 #define DECL_COMPLETE_CONSTRUCTOR_P(NODE) \
2911 (DECL_NAME (NODE) == complete_ctor_identifier)
2913 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a base
2915 #define DECL_BASE_CONSTRUCTOR_P(NODE) \
2916 (DECL_NAME (NODE) == base_ctor_identifier)
2918 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor, but not either the
2921 #define DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P(NODE) \
2922 (DECL_NAME (NODE) == ctor_identifier)
2924 /* Nonzero if NODE (a FUNCTION_DECL) is a copy constructor. */
2925 #define DECL_COPY_CONSTRUCTOR_P(NODE) \
2926 (DECL_CONSTRUCTOR_P (NODE) && copy_fn_p (NODE) > 0)
2928 /* Nonzero if NODE (a FUNCTION_DECL) is a move constructor. */
2929 #define DECL_MOVE_CONSTRUCTOR_P(NODE) \
2930 (DECL_CONSTRUCTOR_P (NODE) && move_fn_p (NODE))
2932 /* Nonzero if NODE (a FUNCTION_DECL or TEMPLATE_DECL)
2934 #define DECL_DESTRUCTOR_P(NODE) \
2935 DECL_CXX_DESTRUCTOR_P (STRIP_TEMPLATE (NODE))
2937 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor, but not the
2940 #define DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P(NODE) \
2941 (DECL_NAME (NODE) == dtor_identifier)
2943 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
2945 #define DECL_COMPLETE_DESTRUCTOR_P(NODE) \
2946 (DECL_NAME (NODE) == complete_dtor_identifier)
2948 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a base
2950 #define DECL_BASE_DESTRUCTOR_P(NODE) \
2951 (DECL_NAME (NODE) == base_dtor_identifier)
2953 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
2955 #define DECL_DELETING_DESTRUCTOR_P(NODE) \
2956 (DECL_NAME (NODE) == deleting_dtor_identifier)
2959 DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P is true of NODE. */
2960 #define DECL_MAYBE_IN_CHARGE_CDTOR_P(NODE) \
2961 (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (NODE) \
2962 || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (NODE))
2964 /* Nonzero if NODE (a _DECL) is a cloned constructor or
2966 #define DECL_CLONED_FUNCTION_P(NODE) \
2967 (DECL_NAME (NODE) \
2968 && IDENTIFIER_CDTOR_P (DECL_NAME (NODE)) \
2969 && !DECL_MAYBE_IN_CHARGE_CDTOR_P (NODE))
2973 #define DECL_CLONED_FUNCTION(NODE) \
2974 (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE))->u.fn.u5.cloned_function)
2992 /* Nonzero if NODE has DECL_DISCRIMINATOR and not DECL_ACCESS. */
2993 #define DECL_DISCRIMINATOR_P(NODE) \
2994 (((TREE_CODE (NODE) == VAR_DECL && TREE_STATIC (NODE)) \
2995 || DECL_IMPLICIT_TYPEDEF_P (NODE)) \
2996 && DECL_FUNCTION_SCOPE_P (NODE))
2999 #define DECL_DISCRIMINATOR(NODE) (LANG_DECL_MIN_CHECK (NODE)->access)
3003 #define DECL_PARM_INDEX(NODE) \
3004 (LANG_DECL_PARM_CHECK (NODE)->index)
3010 #define DECL_PARM_LEVEL(NODE) \
3011 (LANG_DECL_PARM_CHECK (NODE)->level)
3013 /* Nonzero if the VTT parm has been added to NODE. */
3014 #define DECL_HAS_VTT_PARM_P(NODE) \
3015 (LANG_DECL_FN_CHECK (NODE)->has_vtt_parm_p)
3017 /* Nonzero if NODE is a FUNCTION_DECL for which a VTT parameter is
3019 #define DECL_NEEDS_VTT_PARM_P(NODE) \
3020 (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (NODE)) \
3021 && (DECL_BASE_CONSTRUCTOR_P (NODE) \
3022 || DECL_BASE_DESTRUCTOR_P (NODE)))
3024 /* Nonzero if NODE is a user-defined conversion operator. */
3025 #define DECL_CONV_FN_P(NODE) IDENTIFIER_CONV_OP_P (DECL_NAME (NODE))
3031 /* Nonzero if NODE, a static data member, was declared in its class as an
3033 #define VAR_HAD_UNKNOWN_BOUND(NODE) \
3034 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE)) \
3035 ? DECL_LANG_SPECIFIC (NODE)->u.base.unknown_bound_p \
3037 #define SET_VAR_HAD_UNKNOWN_BOUND(NODE) \
3038 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))->u.base.unknown_bound_p = true)
3040 /* True iff decl NODE is for an overloaded operator. */
3041 #define DECL_OVERLOADED_OPERATOR_P(NODE) \
3042 IDENTIFIER_ANY_OP_P (DECL_NAME (NODE))
3044 /* Nonzero if NODE is an assignment operator (including += and such). */
3045 #define DECL_ASSIGNMENT_OPERATOR_P(NODE) \
3046 IDENTIFIER_ASSIGN_OP_P (DECL_NAME (NODE))
3048 /* NODE is a function_decl for an overloaded operator. Return its
3050 #define DECL_OVERLOADED_OPERATOR_CODE_RAW(NODE) \
3051 (LANG_DECL_FN_CHECK (NODE)->ovl_op_code)
3061 #define DECL_HAS_IN_CHARGE_PARM_P(NODE) \
3062 (LANG_DECL_FN_CHECK (NODE)->has_in_charge_parm_p)
3065 #define DECL_IS_BUILTIN_CONSTANT_P(NODE) \
3066 (TREE_CODE (NODE) == FUNCTION_DECL \
3067 && DECL_BUILT_IN_CLASS (NODE) == BUILT_IN_NORMAL \
3068 && DECL_FUNCTION_CODE (NODE) == BUILT_IN_CONSTANT_P)
3075 #define DECL_IN_AGGR_P(NODE) (DECL_LANG_FLAG_3 (NODE))
3081 #define DECL_INITIALIZED_P(NODE) \
3082 (TREE_LANG_FLAG_1 (VAR_DECL_CHECK (NODE)))
3086 #define DECL_NONTRIVIALLY_INITIALIZED_P(NODE) \
3087 (TREE_LANG_FLAG_6 (VAR_DECL_CHECK (NODE)))
3091 #define DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P(NODE) \
3092 (TREE_LANG_FLAG_2 (VAR_DECL_CHECK (NODE)))
3109 #define DECL_FRIEND_P(NODE) \
3110 (DECL_LANG_SPECIFIC (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK (NODE)) \
3115 #define DECL_GNU_TLS_P(NODE) \
3116 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE)) \
3117 && DECL_LANG_SPECIFIC (NODE)->u.base.friend_or_tls)
3118 #define SET_DECL_GNU_TLS_P(NODE) \
3119 (retrofit_lang_decl (VAR_DECL_CHECK (NODE)), \
3120 DECL_LANG_SPECIFIC (NODE)->u.base.friend_or_tls = true)
3123 #define DECL_BEFRIENDING_CLASSES(NODE) \
3124 (LANG_DECL_FN_CHECK (NODE)->befriending_classes)
3128 #define DECL_STATIC_FUNCTION_P(NODE) \
3129 (LANG_DECL_FN_CHECK (NODE)->static_function)
3133 #define DECL_NONSTATIC_MEMBER_FUNCTION_P(NODE) \
3134 (TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE)
3138 #define DECL_FUNCTION_MEMBER_P(NODE) \
3139 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) || DECL_STATIC_FUNCTION_P (NODE))
3143 #define DECL_CONST_MEMFUNC_P(NODE) \
3144 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
3146 (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
3150 #define DECL_VOLATILE_MEMFUNC_P(NODE) \
3151 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
3153 (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
3156 #define DECL_NONSTATIC_MEMBER_P(NODE) \
3157 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
3158 || TREE_CODE (NODE) == FIELD_DECL)
3162 #define DECL_MUTABLE_P(NODE) (DECL_LANG_FLAG_0 (FIELD_DECL_CHECK (NODE)))
3166 #define DECL_NONCONVERTING_P(NODE) \
3167 (LANG_DECL_FN_CHECK (NODE)->nonconverting)
3171 #define DECL_PURE_VIRTUAL_P(NODE) \
3172 (LANG_DECL_FN_CHECK (NODE)->pure_virtual)
3177 #define DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P(NODE) \
3178 (LANG_DECL_FN_CHECK (NODE)->has_dependent_explicit_spec_p)
3182 #define DECL_MAYBE_DELETED(NODE) \
3183 (LANG_DECL_FN_CHECK (NODE)->maybe_deleted)
3185 /* True (in a FUNCTION_DECL) if NODE is a virtual function that is an
3189 #define DECL_INVALID_OVERRIDER_P(NODE) \
3190 (DECL_LANG_FLAG_4 (NODE))
3192 /* True (in a FUNCTION_DECL) if NODE is a function declared with
3194 #define DECL_OVERRIDE_P(NODE) (TREE_LANG_FLAG_0 (NODE))
3196 /* The thunks associated with NODE, a FUNCTION_DECL. */
3197 #define DECL_THUNKS(NODE) \
3198 (DECL_VIRTUAL_P (NODE) ? LANG_DECL_FN_CHECK (NODE)->context : NULL_TREE)
3201 #define SET_DECL_THUNKS(NODE,THUNKS) \
3202 (LANG_DECL_FN_CHECK (NODE)->context = (THUNKS))
3204 /* If NODE, a FUNCTION_DECL, is a C++11 inheriting constructor, then this
3206 #define DECL_INHERITED_CTOR(NODE) \
3207 (DECL_DECLARES_FUNCTION_P (NODE) && DECL_CONSTRUCTOR_P (NODE) \
3208 ? LANG_DECL_FN_CHECK (NODE)->context : NULL_TREE)
3211 #define DECL_INHERITED_CTOR_BASE(NODE) \
3212 (DECL_INHERITED_CTOR (NODE) \
3214 ? strip_inheriting_ctors (NODE) \
3215 : DECL_INHERITED_CTOR (NODE)) \
3219 #define SET_DECL_INHERITED_CTOR(NODE,INH) \
3220 (LANG_DECL_FN_CHECK (NODE)->context = (INH))
3222 /* Nonzero if NODE is a thunk, rather than an ordinary function. */
3223 #define DECL_THUNK_P(NODE) \
3224 (TREE_CODE (NODE) == FUNCTION_DECL \
3225 && DECL_LANG_SPECIFIC (NODE) \
3226 && LANG_DECL_FN_CHECK (NODE)->thunk_p)
3229 #define SET_DECL_THUNK_P(NODE, THIS_ADJUSTING) \
3230 (LANG_DECL_FN_CHECK (NODE)->thunk_p = 1, \
3231 LANG_DECL_FN_CHECK (NODE)->this_thunk_p = (THIS_ADJUSTING))
3233 /* Nonzero if NODE is a this pointer adjusting thunk. */
3234 #define DECL_THIS_THUNK_P(NODE) \
3235 (DECL_THUNK_P (NODE) && LANG_DECL_FN_CHECK (NODE)->this_thunk_p)
3237 /* Nonzero if NODE is a result pointer adjusting thunk. */
3238 #define DECL_RESULT_THUNK_P(NODE) \
3239 (DECL_THUNK_P (NODE) && !LANG_DECL_FN_CHECK (NODE)->this_thunk_p)
3241 /* Nonzero if NODE is a FUNCTION_DECL, but not a thunk. */
3242 #define DECL_NON_THUNK_FUNCTION_P(NODE) \
3243 (TREE_CODE (NODE) == FUNCTION_DECL && !DECL_THUNK_P (NODE))
3245 /* Nonzero if NODE is `extern "C"'. */
3246 #define DECL_EXTERN_C_P(NODE) \
3247 (DECL_LANGUAGE (NODE) == lang_c)
3249 /* Nonzero if NODE is an `extern "C"' function. */
3250 #define DECL_EXTERN_C_FUNCTION_P(NODE) \
3251 (DECL_NON_THUNK_FUNCTION_P (NODE) && DECL_EXTERN_C_P (NODE))
3258 #define DECL_IMMEDIATE_FUNCTION_P(NODE) \
3259 (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (STRIP_TEMPLATE (NODE))) \
3260 ? LANG_DECL_FN_CHECK (NODE)->immediate_fn_p \
3262 #define SET_DECL_IMMEDIATE_FUNCTION_P(NODE) \
3263 (retrofit_lang_decl (FUNCTION_DECL_CHECK (NODE)), \
3264 LANG_DECL_FN_CHECK (NODE)->immediate_fn_p = true)
3266 // True if NODE was declared as 'concept'. The flag implies that the
3269 #define DECL_DECLARED_CONCEPT_P(NODE) \
3270 (DECL_LANG_SPECIFIC (NODE)->u.base.concept_p)
3274 #define DECL_PRETTY_FUNCTION_P(NODE) \
3275 (DECL_NAME (NODE) \
3276 && id_equal (DECL_NAME (NODE), "__PRETTY_FUNCTION__"))
3279 #define DECL_FNAME_P(NODE) \
3280 (VAR_P (NODE) && DECL_NAME (NODE) && DECL_ARTIFICIAL (NODE) \
3281 && DECL_HAS_VALUE_EXPR_P (NODE) \
3282 && (id_equal (DECL_NAME (NODE), "__PRETTY_FUNCTION__") \
3283 || id_equal (DECL_NAME (NODE), "__FUNCTION__") \
3284 || id_equal (DECL_NAME (NODE), "__func__")))
3290 #define CP_DECL_THREAD_LOCAL_P(NODE) \
3291 (TREE_LANG_FLAG_0 (VAR_DECL_CHECK (NODE)))
3295 #define DECL_CLASS_CONTEXT(NODE) \
3296 (DECL_CLASS_SCOPE_P (NODE) ? DECL_CONTEXT (NODE) : NULL_TREE)
3304 #define DECL_FRIEND_CONTEXT(NODE) \
3305 ((DECL_DECLARES_FUNCTION_P (NODE) \
3306 && DECL_FRIEND_P (NODE) && !DECL_FUNCTION_MEMBER_P (NODE)) \
3307 ? LANG_DECL_FN_CHECK (NODE)->context \
3310 /* Set the DECL_FRIEND_CONTEXT for NODE to CONTEXT. */
3311 #define SET_DECL_FRIEND_CONTEXT(NODE, CONTEXT) \
3312 (LANG_DECL_FN_CHECK (NODE)->context = (CONTEXT))
3314 #define CP_DECL_CONTEXT(NODE) \
3315 (!DECL_FILE_SCOPE_P (NODE) ? DECL_CONTEXT (NODE) : global_namespace)
3316 #define CP_TYPE_CONTEXT(NODE) \
3317 (!TYPE_FILE_SCOPE_P (NODE) ? TYPE_CONTEXT (NODE) : global_namespace)
3318 #define FROB_CONTEXT(NODE) \
3319 ((NODE) == global_namespace ? DECL_CONTEXT (NODE) : (NODE))
3321 /* 1 iff NODE has namespace scope, including the global namespace. */
3322 #define DECL_NAMESPACE_SCOPE_P(NODE) \
3323 (!DECL_TEMPLATE_PARM_P (NODE) \
3324 && TREE_CODE (CP_DECL_CONTEXT (NODE)) == NAMESPACE_DECL)
3326 #define TYPE_NAMESPACE_SCOPE_P(NODE) \
3327 (TREE_CODE (CP_TYPE_CONTEXT (NODE)) == NAMESPACE_DECL)
3329 #define NAMESPACE_SCOPE_P(NODE) \
3330 ((DECL_P (NODE) && DECL_NAMESPACE_SCOPE_P (NODE)) \
3331 || (TYPE_P (NODE) && TYPE_NAMESPACE_SCOPE_P (NODE)))
3333 /* 1 iff NODE is a class member. */
3334 #define DECL_CLASS_SCOPE_P(NODE) \
3335 (DECL_CONTEXT (NODE) && TYPE_P (DECL_CONTEXT (NODE)))
3337 #define TYPE_CLASS_SCOPE_P(NODE) \
3338 (TYPE_CONTEXT (NODE) && TYPE_P (TYPE_CONTEXT (NODE)))
3340 /* 1 iff NODE is function-local. */
3341 #define DECL_FUNCTION_SCOPE_P(NODE) \
3342 (DECL_CONTEXT (NODE) \
3343 && TREE_CODE (DECL_CONTEXT (NODE)) == FUNCTION_DECL)
3345 #define TYPE_FUNCTION_SCOPE_P(NODE) \
3346 (TYPE_CONTEXT (NODE) && TREE_CODE (TYPE_CONTEXT (NODE)) == FUNCTION_DECL)
3348 /* 1 iff VAR_DECL node NODE is a type-info decl. This flag is set for
3350 #define DECL_TINFO_P(NODE) TREE_LANG_FLAG_4 (VAR_DECL_CHECK (NODE))
3352 /* 1 iff VAR_DECL node NODE is virtual table or VTT. We forward to
3355 #define DECL_VTABLE_OR_VTT_P(NODE) DECL_VIRTUAL_P (VAR_DECL_CHECK (NODE))
3358 #define FUNCTION_REF_QUALIFIED(NODE) \
3359 TREE_LANG_FLAG_4 (FUNC_OR_METHOD_CHECK (NODE))
3362 #define FUNCTION_RVALUE_QUALIFIED(NODE) \
3363 TREE_LANG_FLAG_5 (FUNC_OR_METHOD_CHECK (NODE))
3365 /* 1 iff NODE is function-local, but for types. */
3366 #define LOCAL_CLASS_P(NODE) \
3367 (decl_function_context (TYPE_MAIN_DECL (NODE)) != NULL_TREE)
3371 #define SCOPE_DEPTH(NODE) \
3372 (NAMESPACE_DECL_CHECK (NODE)->base.u.bits.address_space)
3375 #define DECL_NAMESPACE_INLINE_P(NODE) \
3376 TREE_LANG_FLAG_0 (NAMESPACE_DECL_CHECK (NODE))
3379 #define DECL_NAMESPACE_INLINEES(NODE) \
3380 (LANG_DECL_NS_CHECK (NODE)->inlinees)
3383 #define DECL_NAMESPACE_BINDINGS(NODE) \
3384 (LANG_DECL_NS_CHECK (NODE)->bindings)
3388 #define DECL_NAMESPACE_ALIAS(NODE) \
3389 DECL_ABSTRACT_ORIGIN (NAMESPACE_DECL_CHECK (NODE))
3390 #define ORIGINAL_NAMESPACE(NODE) \
3391 (DECL_NAMESPACE_ALIAS (NODE) ? DECL_NAMESPACE_ALIAS (NODE) : (NODE))
3393 /* Nonzero if NODE is the std namespace. */
3394 #define DECL_NAMESPACE_STD_P(NODE) \
3395 ((NODE) == std_node)
3399 #define ATTR_IS_DEPENDENT(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
3403 #define ABI_TAG_IMPLICIT(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
3406 #define DECL_DEPENDENT_P(NODE) DECL_LANG_FLAG_0 (USING_DECL_CHECK (NODE))
3409 #define USING_DECL_SCOPE(NODE) DECL_RESULT_FLD (USING_DECL_CHECK (NODE))
3412 #define USING_DECL_DECLS(NODE) DECL_INITIAL (USING_DECL_CHECK (NODE))
3415 #define USING_DECL_TYPENAME_P(NODE) DECL_LANG_FLAG_1 (USING_DECL_CHECK (NODE))
3420 #define DECL_PENDING_INLINE_P(NODE) \
3421 (LANG_DECL_FN_CHECK (NODE)->pending_inline_p)
3425 #define DECL_PENDING_INLINE_INFO(NODE) \
3426 (LANG_DECL_FN_CHECK (NODE)->u.pending_inline_info)
3429 #define TYPE_DECL_ALIAS_P(NODE) \
3430 DECL_LANG_FLAG_6 (TYPE_DECL_CHECK (NODE))
3433 #define TEMPLATE_DECL_COMPLEX_ALIAS_P(NODE) \
3434 DECL_LANG_FLAG_2 (TEMPLATE_DECL_CHECK (NODE))
3439 #define TYPE_ALIAS_P(NODE) \
3440 (TYPE_P (NODE) \
3441 && TYPE_NAME (NODE) \
3442 && TREE_CODE (TYPE_NAME (NODE)) == TYPE_DECL \
3443 && TYPE_DECL_ALIAS_P (TYPE_NAME (NODE)))
3464 #define DECL_TEMPLATE_INFO(NODE) \
3465 (DECL_LANG_SPECIFIC (TEMPLATE_INFO_DECL_CHECK (NODE)) \
3469 #define DECL_CAPTURED_VARIABLE(NODE) \
3470 (LANG_DECL_MIN_CHECK (NODE)->access)
3475 #define DECL_ANON_UNION_VAR_P(NODE) \
3476 (DECL_LANG_FLAG_4 (VAR_DECL_CHECK (NODE)))
3479 #define CLASSTYPE_TEMPLATE_INFO(NODE) \
3480 (TYPE_LANG_SLOT_1 (RECORD_OR_UNION_CHECK (NODE)))
3483 #define TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO(NODE) \
3484 (TYPE_LANG_SLOT_1 (BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK (NODE)))
3488 templateness of NODE. It'd be nice if this could unconditionally
3491 #define TYPE_TEMPLATE_INFO(NODE) \
3492 (TREE_CODE (NODE) == ENUMERAL_TYPE \
3493 || TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM \
3494 || RECORD_OR_UNION_TYPE_P (NODE) \
3495 ? TYPE_LANG_SLOT_1 (NODE) : NULL_TREE)
3498 #define TYPE_ALIAS_TEMPLATE_INFO(NODE) \
3499 (DECL_LANG_SPECIFIC (TYPE_NAME (NODE)) \
3500 ? DECL_TEMPLATE_INFO (TYPE_NAME (NODE)) \
3503 /* If NODE is a type alias, this accessor returns the template info
3506 #define TYPE_TEMPLATE_INFO_MAYBE_ALIAS(NODE) \
3507 (typedef_variant_p (NODE) \
3508 ? TYPE_ALIAS_TEMPLATE_INFO (NODE) \
3509 : TYPE_TEMPLATE_INFO (NODE))
3513 #define SET_TYPE_TEMPLATE_INFO(NODE, VAL) \
3514 (TREE_CODE (NODE) == ENUMERAL_TYPE \
3515 || (CLASS_TYPE_P (NODE) && !TYPE_ALIAS_P (NODE)) \
3516 ? (TYPE_LANG_SLOT_1 (NODE) = (VAL)) \
3517 : (DECL_TEMPLATE_INFO (TYPE_NAME (NODE)) = (VAL)))
3519 #define TI_TEMPLATE(NODE) \
3520 ((struct tree_template_info*)TEMPLATE_INFO_CHECK (NODE))->tmpl
3521 #define TI_ARGS(NODE) \
3522 ((struct tree_template_info*)TEMPLATE_INFO_CHECK (NODE))->args
3523 #define TI_PENDING_TEMPLATE_FLAG(NODE) \
3524 TREE_LANG_FLAG_1 (TEMPLATE_INFO_CHECK (NODE))
3528 #define NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) \
3529 TREE_CHAIN (TREE_VEC_CHECK (NODE))
3533 #define SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE, INT_VALUE) \
3534 NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) = build_int_cst (NULL_TREE, INT_VALUE)
3536 #define GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) \
3537 int_cst_value (NON_DEFAULT_TEMPLATE_ARGS_COUNT (NODE))
3539 #define GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) \
3540 NON_DEFAULT_TEMPLATE_ARGS_COUNT (NODE) \
3541 ? int_cst_value (NON_DEFAULT_TEMPLATE_ARGS_COUNT (NODE)) \
3542 : TREE_VEC_LENGTH (INNERMOST_TEMPLATE_ARGS (NODE))
3549 #define TI_TYPEDEFS_NEEDING_ACCESS_CHECKING(NODE) \
3551 (NODE))->typedefs_needing_access_checking
3573 #define TMPL_ARGS_HAVE_MULTIPLE_LEVELS(NODE) \
3574 (NODE && TREE_VEC_LENGTH (NODE) && TREE_VEC_ELT (NODE, 0) \
3575 && TREE_CODE (TREE_VEC_ELT (NODE, 0)) == TREE_VEC)
3582 #define TMPL_ARGS_DEPTH(NODE) \
3583 (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (NODE) ? TREE_VEC_LENGTH (NODE) : 1)
3600 /* Given a single level of template arguments in NODE, return the
3602 #define NUM_TMPL_ARGS(NODE) \
3603 (TREE_VEC_LENGTH (NODE))
3606 #define INNERMOST_TEMPLATE_ARGS(NODE) \
3607 (get_innermost_template_args ((NODE), 1))
3609 /* The number of levels of template parameters given by NODE. */
3610 #define TMPL_PARMS_DEPTH(NODE) \
3611 ((HOST_WIDE_INT) TREE_INT_CST_LOW (TREE_PURPOSE (NODE)))
3613 /* The TEMPLATE_DECL instantiated or specialized by NODE. This
3634 #define DECL_TI_TEMPLATE(NODE) TI_TEMPLATE (DECL_TEMPLATE_INFO (NODE))
3641 #define DECL_TI_ARGS(NODE) TI_ARGS (DECL_TEMPLATE_INFO (NODE))
3643 /* The TEMPLATE_DECL associated with NODE, a class type. Even if NODE
3660 #define CLASSTYPE_TI_TEMPLATE(NODE) TI_TEMPLATE (CLASSTYPE_TEMPLATE_INFO (NODE))
3661 #define CLASSTYPE_TI_ARGS(NODE) TI_ARGS (CLASSTYPE_TEMPLATE_INFO (NODE))
3673 #define TYPE_TI_TEMPLATE(NODE) \
3674 (TI_TEMPLATE (TYPE_TEMPLATE_INFO (NODE)))
3677 #define TYPE_TI_ARGS(NODE) \
3678 (TI_ARGS (TYPE_TEMPLATE_INFO (NODE)))
3680 #define INNERMOST_TEMPLATE_PARMS(NODE) TREE_VALUE (NODE)
3682 /* Nonzero if NODE (a TEMPLATE_DECL) is a member template, in the
3684 #define DECL_MEMBER_TEMPLATE_P(NODE) \
3685 (DECL_LANG_FLAG_1 (TEMPLATE_DECL_CHECK (NODE)))
3687 /* Nonzero if the NODE corresponds to the template parameters for a
3690 #define TEMPLATE_PARMS_FOR_INLINE(NODE) TREE_LANG_FLAG_1 (NODE)
3693 #define DECL_PACK_P(NODE) \
3694 (DECL_P (NODE) && PACK_EXPANSION_P (TREE_TYPE (NODE)))
3696 /* Determines if NODE is an expansion of one or more parameter packs,
3698 #define PACK_EXPANSION_P(NODE) \
3699 (TREE_CODE (NODE) == TYPE_PACK_EXPANSION \
3700 || TREE_CODE (NODE) == EXPR_PACK_EXPANSION)
3704 #define PACK_EXPANSION_PATTERN(NODE) \
3705 (TREE_CODE (NODE) == TYPE_PACK_EXPANSION ? TREE_TYPE (NODE) \
3706 : TREE_OPERAND (NODE, 0))
3710 #define SET_PACK_EXPANSION_PATTERN(NODE,VALUE) \
3711 if (TREE_CODE (NODE) == TYPE_PACK_EXPANSION) \
3712 TREE_TYPE (NODE) = VALUE; \
3714 TREE_OPERAND (NODE, 0) = VALUE
3718 #define PACK_EXPANSION_PARAMETER_PACKS(NODE) \
3719 *(TREE_CODE (NODE) == EXPR_PACK_EXPANSION \
3720 ? &TREE_OPERAND (NODE, 1) \
3721 : &TYPE_MIN_VALUE_RAW (TYPE_PACK_EXPANSION_CHECK (NODE)))
3729 #define PACK_EXPANSION_EXTRA_ARGS(NODE) \
3730 *(TREE_CODE (NODE) == TYPE_PACK_EXPANSION \
3731 ? &TYPE_MAX_VALUE_RAW (NODE) \
3732 : &TREE_OPERAND ((NODE), 2))
3735 #define PACK_EXPANSION_LOCAL_P(NODE) TREE_LANG_FLAG_0 (NODE)
3738 #define PACK_EXPANSION_SIZEOF_P(NODE) TREE_LANG_FLAG_1 (NODE)
3741 #define PACK_EXPANSION_AUTO_P(NODE) TREE_LANG_FLAG_2 (NODE)
3744 #define WILDCARD_PACK_P(NODE) TREE_LANG_FLAG_0 (NODE)
3747 #define ARGUMENT_PACK_P(NODE) \
3748 (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK \
3749 || TREE_CODE (NODE) == NONTYPE_ARGUMENT_PACK)
3753 #define ARGUMENT_PACK_ARGS(NODE) \
3754 (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK? TREE_TYPE (NODE) \
3755 : TREE_OPERAND (NODE, 0))
3759 #define SET_ARGUMENT_PACK_ARGS(NODE,VALUE) \
3760 if (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK) \
3761 TREE_TYPE (NODE) = VALUE; \
3763 TREE_OPERAND (NODE, 0) = VALUE
3771 #define ARGUMENT_PACK_INCOMPLETE_P(NODE) \
3772 TREE_ADDRESSABLE (ARGUMENT_PACK_ARGS (NODE))
3776 #define ARGUMENT_PACK_EXPLICIT_ARGS(NODE) \
3777 TREE_TYPE (ARGUMENT_PACK_ARGS (NODE))
3781 #define ARGUMENT_PACK_SELECT_FROM_PACK(NODE) \
3782 (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->argument_pack)
3786 #define ARGUMENT_PACK_SELECT_INDEX(NODE) \
3787 (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->index)
3789 #define FOLD_EXPR_CHECK(NODE) \
3790 TREE_CHECK4 (NODE, UNARY_LEFT_FOLD_EXPR, UNARY_RIGHT_FOLD_EXPR, \
3793 #define BINARY_FOLD_EXPR_CHECK(NODE) \
3794 TREE_CHECK2 (NODE, BINARY_LEFT_FOLD_EXPR, BINARY_RIGHT_FOLD_EXPR)
3796 /* True if NODE is UNARY_FOLD_EXPR or a BINARY_FOLD_EXPR */
3797 #define FOLD_EXPR_P(NODE) \
3798 (TREE_CODE (NODE) == UNARY_LEFT_FOLD_EXPR \
3799 || TREE_CODE (NODE) == UNARY_RIGHT_FOLD_EXPR \
3800 || TREE_CODE (NODE) == BINARY_LEFT_FOLD_EXPR \
3801 || TREE_CODE (NODE) == BINARY_RIGHT_FOLD_EXPR)
3803 /* True when NODE is a fold over a compound assignment operator. */
3804 #define FOLD_EXPR_MODIFY_P(NODE) \
3805 TREE_LANG_FLAG_0 (FOLD_EXPR_CHECK (NODE))
3808 #define FOLD_EXPR_OP(NODE) \
3809 TREE_OPERAND (FOLD_EXPR_CHECK (NODE), 0)
3812 #define FOLD_EXPR_PACK(NODE) \
3813 TREE_OPERAND (FOLD_EXPR_CHECK (NODE), 1)
3817 #define FOLD_EXPR_INIT(NODE) \
3818 TREE_OPERAND (BINARY_FOLD_EXPR_CHECK (NODE), 2)
3821 #define DECL_SAVED_AUTO_RETURN_TYPE(NODE) \
3822 (LANG_DECL_FN_CHECK (FUNCTION_DECL_CHECK (NODE)) \
3825 /* True if NODE is an implicit INDIRECT_REF from convert_from_reference. */
3826 #define REFERENCE_REF_P(NODE) \
3827 (INDIRECT_REF_P (NODE) \
3828 && TREE_TYPE (TREE_OPERAND (NODE, 0)) \
3829 && TYPE_REF_P (TREE_TYPE (TREE_OPERAND ((NODE), 0))))
3831 #define NEW_EXPR_USE_GLOBAL(NODE) \
3832 TREE_LANG_FLAG_0 (NEW_EXPR_CHECK (NODE))
3833 #define DELETE_EXPR_USE_GLOBAL(NODE) \
3834 TREE_LANG_FLAG_0 (DELETE_EXPR_CHECK (NODE))
3835 #define DELETE_EXPR_USE_VEC(NODE) \
3836 TREE_LANG_FLAG_1 (DELETE_EXPR_CHECK (NODE))
3838 #define CALL_OR_AGGR_INIT_CHECK(NODE) \
3839 TREE_CHECK2 ((NODE), CALL_EXPR, AGGR_INIT_EXPR)
3843 #define COMPOUND_EXPR_OVERLOADED(NODE) \
3844 TREE_LANG_FLAG_0 (COMPOUND_EXPR_CHECK (NODE))
3848 #define KOENIG_LOOKUP_P(NODE) TREE_LANG_FLAG_0 (CALL_EXPR_CHECK (NODE))
3852 #define CALL_FROM_NEW_OR_DELETE_P(NODE) \
3853 TREE_LANG_FLAG_2 (CALL_EXPR_CHECK (NODE))
3855 /* True if the arguments to NODE should be evaluated in left-to-right
3857 #define CALL_EXPR_ORDERED_ARGS(NODE) \
3858 TREE_LANG_FLAG_3 (CALL_OR_AGGR_INIT_CHECK (NODE))
3860 /* True if the arguments to NODE should be evaluated in right-to-left
3862 #define CALL_EXPR_REVERSE_ARGS(NODE) \
3863 TREE_LANG_FLAG_5 (CALL_OR_AGGR_INIT_CHECK (NODE))
3867 #define CALL_EXPR_OPERATOR_SYNTAX(NODE) \
3868 TREE_LANG_FLAG_6 (CALL_OR_AGGR_INIT_CHECK (NODE))
3873 #define PAREN_STRING_LITERAL_P(NODE) \
3874 TREE_LANG_FLAG_0 (STRING_CST_CHECK (NODE))
3880 #define REF_PARENTHESIZED_P(NODE) \
3881 TREE_LANG_FLAG_2 (TREE_CHECK4 ((NODE), COMPONENT_REF, INDIRECT_REF, SCOPE_REF, VIEW_CONVERT_EXPR))
3885 #define AGGR_INIT_VIA_CTOR_P(NODE) \
3886 TREE_LANG_FLAG_0 (AGGR_INIT_EXPR_CHECK (NODE))
3890 #define AGGR_INIT_ZERO_FIRST(NODE) \
3891 TREE_LANG_FLAG_2 (AGGR_INIT_EXPR_CHECK (NODE))
3895 #define AGGR_INIT_FROM_THUNK_P(NODE) \
3896 (AGGR_INIT_EXPR_CHECK (NODE)->base.protected_flag)
3902 #define AGGR_INIT_EXPR_FN(NODE) TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 1)
3903 #define AGGR_INIT_EXPR_SLOT(NODE) \
3904 TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 2)
3905 #define AGGR_INIT_EXPR_ARG(NODE, I) \
3906 TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), (I) + 3)
3907 #define aggr_init_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3)
3909 /* AGGR_INIT_EXPR_ARGP returns a pointer to the argument vector for NODE.
3910 We can't use &AGGR_INIT_EXPR_ARG (NODE, 0) because that will complain if
3915 #define AGGR_INIT_EXPR_ARGP(NODE) \
3916 (&(TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 0)) + 3)
3977 #define VEC_INIT_EXPR_SLOT(NODE) TREE_OPERAND (VEC_INIT_EXPR_CHECK (NODE), 0)
3978 #define VEC_INIT_EXPR_INIT(NODE) TREE_OPERAND (VEC_INIT_EXPR_CHECK (NODE), 1)
3982 #define VEC_INIT_EXPR_IS_CONSTEXPR(NODE) \
3983 TREE_LANG_FLAG_0 (VEC_INIT_EXPR_CHECK (NODE))
3986 #define VEC_INIT_EXPR_VALUE_INIT(NODE) \
3987 TREE_LANG_FLAG_1 (VEC_INIT_EXPR_CHECK (NODE))
3991 #define MUST_NOT_THROW_COND(NODE) \
3992 TREE_OPERAND (MUST_NOT_THROW_EXPR_CHECK (NODE), 1)
3998 #define CLASSTYPE_IS_TEMPLATE(NODE) \
3999 (CLASSTYPE_TEMPLATE_INFO (NODE) \
4000 && !CLASSTYPE_USE_TEMPLATE (NODE) \
4001 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE)))
4007 #define TYPENAME_TYPE_FULLNAME(NODE) \
4008 (TYPE_VALUES_RAW (TYPENAME_TYPE_CHECK (NODE)))
4011 #define TYPENAME_IS_ENUM_P(NODE) \
4012 (TREE_LANG_FLAG_0 (TYPENAME_TYPE_CHECK (NODE)))
4016 #define TYPENAME_IS_CLASS_P(NODE) \
4017 (TREE_LANG_FLAG_1 (TYPENAME_TYPE_CHECK (NODE)))
4020 #define TYPENAME_IS_RESOLVING_P(NODE) \
4021 (TREE_LANG_FLAG_2 (TYPENAME_TYPE_CHECK (NODE)))
4027 #define TYPE_POLYMORPHIC_P(NODE) (TREE_LANG_FLAG_2 (NODE))
4030 #define TYPE_CONTAINS_VPTR_P(NODE) \
4031 (TYPE_POLYMORPHIC_P (NODE) || CLASSTYPE_VBASECLASSES (NODE))
4033 /* Nonzero if NODE is a FUNCTION_DECL (for a function with global
4035 #define DECL_LOCAL_FUNCTION_P(NODE) \
4036 DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
4038 /* Nonzero if NODE is the target for genericization of 'break' stmts. */
4039 #define LABEL_DECL_BREAK(NODE) \
4040 DECL_LANG_FLAG_0 (LABEL_DECL_CHECK (NODE))
4042 /* Nonzero if NODE is the target for genericization of 'continue' stmts. */
4043 #define LABEL_DECL_CONTINUE(NODE) \
4044 DECL_LANG_FLAG_1 (LABEL_DECL_CHECK (NODE))
4046 /* Nonzero if NODE is the target for genericization of 'return' stmts
4048 #define LABEL_DECL_CDTOR(NODE) \
4049 DECL_LANG_FLAG_2 (LABEL_DECL_CHECK (NODE))
4051 /* True if NODE was declared with auto in its return type, but it has
4054 DECL_SAVED_AUTO_RETURN_TYPE (NODE). */
4055 #define FNDECL_USED_AUTO(NODE) \
4056 TREE_LANG_FLAG_2 (FUNCTION_DECL_CHECK (NODE))
4058 /* Nonzero if NODE is a DECL which we know about but which has not
4062 #define DECL_ANTICIPATED(NODE) \
4063 (DECL_LANG_SPECIFIC (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK (NODE)) \
4066 /* Is DECL NODE a hidden name? */
4067 #define DECL_HIDDEN_P(NODE) \
4068 (DECL_LANG_SPECIFIC (NODE) && TYPE_FUNCTION_OR_TEMPLATE_DECL_P (NODE) \
4069 && DECL_ANTICIPATED (NODE))
4072 #define TYPE_HIDDEN_P(NODE) \
4073 (DECL_LANG_SPECIFIC (TYPE_NAME (NODE)) \
4074 && DECL_ANTICIPATED (TYPE_NAME (NODE)))
4078 #define DECL_OMP_PRIVATIZED_MEMBER(NODE) \
4079 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))->u.base.anticipated_p)
4081 /* Nonzero if NODE is a FUNCTION_DECL which was declared as a friend
4084 #define DECL_HIDDEN_FRIEND_P(NODE) \
4085 (LANG_DECL_FN_CHECK (DECL_COMMON_CHECK (NODE))->hidden_friend_p)
4087 /* Nonzero if NODE is an artificial FUNCTION_DECL for
4089 #define DECL_OMP_DECLARE_REDUCTION_P(NODE) \
4090 (LANG_DECL_FN_CHECK (DECL_COMMON_CHECK (NODE))->omp_declare_reduction_p)
4097 /* Nonzero if NODE is a VAR_DECL which has been declared inline. */
4098 #define DECL_VAR_DECLARED_INLINE_P(NODE) \
4099 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE)) \
4100 ? DECL_LANG_SPECIFIC (NODE)->u.base.var_declared_inline_p \
4102 #define SET_DECL_VAR_DECLARED_INLINE_P(NODE) \
4103 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))->u.base.var_declared_inline_p \
4106 /* True if NODE is a constant variable with a value-dependent initializer. */
4107 #define DECL_DEPENDENT_INIT_P(NODE) \
4108 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE)) \
4109 && DECL_LANG_SPECIFIC (NODE)->u.base.dependent_init_p)
4110 #define SET_DECL_DEPENDENT_INIT_P(NODE, X) \
4111 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))->u.base.dependent_init_p = (X))
4113 /* Nonzero if NODE is an artificial VAR_DECL for a C++17 structured binding
4115 #define DECL_DECOMPOSITION_P(NODE) \
4116 (VAR_P (NODE) && DECL_LANG_SPECIFIC (NODE) \
4117 ? DECL_LANG_SPECIFIC (NODE)->u.base.selector == lds_decomp \
4121 #define DECL_DECOMP_BASE(NODE) \
4122 (LANG_DECL_DECOMP_CHECK (NODE)->base)
4124 /* Nonzero if NODE is an inline VAR_DECL. In C++17, static data members
4126 #define DECL_INLINE_VAR_P(NODE) \
4127 (DECL_VAR_DECLARED_INLINE_P (NODE) \
4129 && DECL_DECLARED_CONSTEXPR_P (NODE) \
4130 && DECL_CLASS_SCOPE_P (NODE)))
4262 #define ENUM_FIXED_UNDERLYING_TYPE_P(NODE) (TYPE_LANG_FLAG_5 (NODE))
4300 #define TYPE_HAS_USER_CONSTRUCTOR(NODE) (TYPE_LANG_FLAG_1 (NODE))
4304 #define TYPE_HAS_LATE_RETURN_TYPE(NODE) \
4305 (TYPE_LANG_FLAG_2 (FUNC_OR_METHOD_CHECK (NODE)))
4321 #define TREE_HAS_CONSTRUCTOR(NODE) (TREE_LANG_FLAG_4 (NODE))
4323 /* True if NODE is a brace-enclosed initializer. */
4324 #define BRACE_ENCLOSED_INITIALIZER_P(NODE) \
4325 (TREE_CODE (NODE) == CONSTRUCTOR && TREE_TYPE (NODE) == init_list_type_node)
4327 /* True if NODE is a compound-literal, i.e., a brace-enclosed
4329 #define COMPOUND_LITERAL_P(NODE) \
4330 (TREE_CODE (NODE) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (NODE))
4332 #define EMPTY_CONSTRUCTOR_P(NODE) (TREE_CODE (NODE) == CONSTRUCTOR \
4333 && vec_safe_is_empty(CONSTRUCTOR_ELTS(NODE))\
4334 && !TREE_HAS_CONSTRUCTOR (NODE))
4336 /* True if NODE is a init-list used as a direct-initializer, i.e.
4338 #define CONSTRUCTOR_IS_DIRECT_INIT(NODE) (TREE_LANG_FLAG_0 (CONSTRUCTOR_CHECK (NODE)))
4342 #define CONSTRUCTOR_IS_DEPENDENT(NODE) \
4343 (TREE_LANG_FLAG_1 (CONSTRUCTOR_CHECK (NODE)))
4347 #define CONSTRUCTOR_MUTABLE_POISON(NODE) \
4348 (TREE_LANG_FLAG_2 (CONSTRUCTOR_CHECK (NODE)))
4352 #define CONSTRUCTOR_C99_COMPOUND_LITERAL(NODE) \
4353 (TREE_LANG_FLAG_3 (CONSTRUCTOR_CHECK (NODE)))
4358 #define CONSTRUCTOR_PLACEHOLDER_BOUNDARY(NODE) \
4359 (TREE_LANG_FLAG_5 (CONSTRUCTOR_CHECK (NODE)))
4361 #define DIRECT_LIST_INIT_P(NODE) \
4362 (BRACE_ENCLOSED_INITIALIZER_P (NODE) && CONSTRUCTOR_IS_DIRECT_INIT (NODE))
4367 #define CONSTRUCTOR_IS_DESIGNATED_INIT(NODE) \
4368 (TREE_LANG_FLAG_6 (CONSTRUCTOR_CHECK (NODE)))
4372 #define CONSTRUCTOR_IS_PAREN_INIT(NODE) \
4373 (CONSTRUCTOR_CHECK(NODE)->base.private_flag)
4375 /* True if NODE represents a conversion for direct-initialization in a
4377 #define IMPLICIT_CONV_EXPR_DIRECT_INIT(NODE) \
4378 (TREE_LANG_FLAG_0 (IMPLICIT_CONV_EXPR_CHECK (NODE)))
4380 /* True if NODE represents a dependent conversion of a non-type template
4382 #define IMPLICIT_CONV_EXPR_NONTYPE_ARG(NODE) \
4383 (TREE_LANG_FLAG_1 (IMPLICIT_CONV_EXPR_CHECK (NODE)))
4385 /* True if NODE represents a conversion for braced-init-list in a
4387 #define IMPLICIT_CONV_EXPR_BRACED_INIT(NODE) \
4388 (TREE_LANG_FLAG_2 (IMPLICIT_CONV_EXPR_CHECK (NODE)))
4392 #define CLASSTYPE_NON_AGGREGATE(NODE) \
4393 (LANG_TYPE_CLASS_CHECK (NODE)->non_aggregate)
4394 #define TYPE_NON_AGGREGATE_CLASS(NODE) \
4395 (CLASS_TYPE_P (NODE) && CLASSTYPE_NON_AGGREGATE (NODE))
4398 #define TYPE_HAS_COMPLEX_COPY_ASSIGN(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_copy_assign)
4401 #define TYPE_HAS_COMPLEX_COPY_CTOR(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_copy_ctor)
4404 #define TYPE_HAS_COMPLEX_MOVE_ASSIGN(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_move_assign)
4407 #define TYPE_HAS_COMPLEX_MOVE_CTOR(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_move_ctor)
4410 #define TYPE_HAS_COMPLEX_DFLT(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_dflt)
4423 #define TYPE_HAS_TRIVIAL_DESTRUCTOR(NODE) \
4424 (!TYPE_HAS_NONTRIVIAL_DESTRUCTOR (NODE))
4430 #define TYPE_HAS_NONTRIVIAL_DESTRUCTOR(NODE) \
4431 (TYPE_LANG_FLAG_4 (NODE))
4434 #define TYPE_HAS_TRIVIAL_DFLT(NODE) \
4435 (TYPE_HAS_DEFAULT_CONSTRUCTOR (NODE) && ! TYPE_HAS_COMPLEX_DFLT (NODE))
4439 #define TYPE_HAS_TRIVIAL_COPY_CTOR(NODE) \
4440 (TYPE_HAS_COPY_CTOR (NODE) && ! TYPE_HAS_COMPLEX_COPY_CTOR (NODE))
4444 #define TYPE_HAS_TRIVIAL_COPY_ASSIGN(NODE) \
4445 (TYPE_HAS_COPY_ASSIGN (NODE) && ! TYPE_HAS_COMPLEX_COPY_ASSIGN (NODE))
4447 /* Returns true if NODE is a pointer-to-data-member. */
4448 #define TYPE_PTRDATAMEM_P(NODE) \
4449 (TREE_CODE (NODE) == OFFSET_TYPE)
4451 /* Returns true if NODE is a pointer. */
4452 #define TYPE_PTR_P(NODE) \
4453 (TREE_CODE (NODE) == POINTER_TYPE)
4455 /* Returns true if NODE is a reference. */
4456 #define TYPE_REF_P(NODE) \
4457 (TREE_CODE (NODE) == REFERENCE_TYPE)
4459 /* Returns true if NODE is a pointer or a reference. */
4460 #define INDIRECT_TYPE_P(NODE) \
4461 (TYPE_PTR_P (NODE) || TYPE_REF_P (NODE))
4463 /* Returns true if NODE is an object type:
4471 #define TYPE_OBJ_P(NODE) \
4472 (!TYPE_REF_P (NODE) \
4473 && !VOID_TYPE_P (NODE) \
4474 && !FUNC_OR_METHOD_TYPE_P (NODE))
4476 /* Returns true if NODE is a pointer to an object. Keep these checks
4478 #define TYPE_PTROB_P(NODE) \
4479 (TYPE_PTR_P (NODE) && TYPE_OBJ_P (TREE_TYPE (NODE)))
4481 /* Returns true if NODE is a reference to an object. Keep these checks
4483 #define TYPE_REF_OBJ_P(NODE) \
4484 (TYPE_REF_P (NODE) && TYPE_OBJ_P (TREE_TYPE (NODE)))
4486 /* Returns true if NODE is a pointer to an object, or a pointer to
4488 #define TYPE_PTROBV_P(NODE) \
4489 (TYPE_PTR_P (NODE) \
4490 && !FUNC_OR_METHOD_TYPE_P (TREE_TYPE (NODE)))
4492 /* Returns true if NODE is a pointer to function type. */
4493 #define TYPE_PTRFN_P(NODE) \
4494 (TYPE_PTR_P (NODE) \
4495 && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE)
4497 /* Returns true if NODE is a reference to function type. */
4498 #define TYPE_REFFN_P(NODE) \
4499 (TYPE_REF_P (NODE) \
4500 && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE)
4502 /* Returns true if NODE is a pointer to member function type. */
4503 #define TYPE_PTRMEMFUNC_P(NODE) \
4504 (TREE_CODE (NODE) == RECORD_TYPE \
4505 && TYPE_PTRMEMFUNC_FLAG (NODE))
4507 #define TYPE_PTRMEMFUNC_FLAG(NODE) \
4508 (TYPE_LANG_FLAG_2 (RECORD_TYPE_CHECK (NODE)))
4510 /* Returns true if NODE is a pointer-to-member. */
4511 #define TYPE_PTRMEM_P(NODE) \
4512 (TYPE_PTRDATAMEM_P (NODE) || TYPE_PTRMEMFUNC_P (NODE))
4514 /* Returns true if NODE is a pointer or a pointer-to-member. */
4515 #define TYPE_PTR_OR_PTRMEM_P(NODE) \
4516 (TYPE_PTR_P (NODE) || TYPE_PTRMEM_P (NODE))
4520 #define PTRMEM_OK_P(NODE) \
4521 TREE_LANG_FLAG_0 (TREE_CHECK3 ((NODE), ADDR_EXPR, OFFSET_REF, SCOPE_REF))
4526 #define TYPE_PTRMEMFUNC_FN_TYPE(NODE) \
4527 (cp_build_qualified_type (TREE_TYPE (TYPE_FIELDS (NODE)),\
4528 cp_type_quals (NODE)))
4532 #define TYPE_PTRMEMFUNC_FN_TYPE_RAW(NODE) \
4533 (TREE_TYPE (TYPE_FIELDS (NODE)))
4536 #define TYPE_PTRMEMFUNC_OBJECT_TYPE(NODE) \
4537 TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (NODE)))
4541 #define TYPE_PTRMEMFUNC_TYPE(NODE) \
4542 TYPE_LANG_SLOT_1 (NODE)
4549 #define TYPE_PTRMEM_CLASS_TYPE(NODE) \
4550 (TYPE_PTRDATAMEM_P (NODE) \
4551 ? TYPE_OFFSET_BASETYPE (NODE) \
4552 : TYPE_PTRMEMFUNC_OBJECT_TYPE (NODE))
4555 #define TYPE_PTRMEM_POINTED_TO_TYPE(NODE) \
4556 (TYPE_PTRDATAMEM_P (NODE) \
4557 ? TREE_TYPE (NODE) \
4558 : TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (NODE)))
4562 #define PTRMEM_CST_CLASS(NODE) \
4563 TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (PTRMEM_CST_CHECK (NODE)))
4567 #define PTRMEM_CST_MEMBER(NODE) \
4568 (((ptrmem_cst_t)PTRMEM_CST_CHECK (NODE))->member)
4571 #define TYPEOF_TYPE_EXPR(NODE) (TYPE_VALUES_RAW (TYPEOF_TYPE_CHECK (NODE)))
4574 #define UNDERLYING_TYPE_TYPE(NODE) \
4575 (TYPE_VALUES_RAW (UNDERLYING_TYPE_CHECK (NODE)))
4578 #define BASES_TYPE(NODE) \
4579 (TYPE_VALUES_RAW (BASES_CHECK (NODE)))
4581 #define BASES_DIRECT(NODE) \
4582 TREE_LANG_FLAG_0 (BASES_CHECK (NODE))
4585 #define DECLTYPE_TYPE_EXPR(NODE) (TYPE_VALUES_RAW (DECLTYPE_TYPE_CHECK (NODE)))
4587 /* Whether the DECLTYPE_TYPE_EXPR of NODE was originally parsed as an
4590 #define DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P(NODE) \
4591 (DECLTYPE_TYPE_CHECK (NODE))->type_common.string_flag
4596 #define DECLTYPE_FOR_LAMBDA_CAPTURE(NODE) \
4597 TREE_LANG_FLAG_0 (DECLTYPE_TYPE_CHECK (NODE))
4598 #define DECLTYPE_FOR_LAMBDA_PROXY(NODE) \
4599 TREE_LANG_FLAG_2 (DECLTYPE_TYPE_CHECK (NODE))
4600 #define DECLTYPE_FOR_REF_CAPTURE(NODE) \
4601 TREE_LANG_FLAG_3 (DECLTYPE_TYPE_CHECK (NODE))
4606 #define DECL_THIS_EXTERN(NODE) \
4607 DECL_LANG_FLAG_2 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
4612 #define DECL_THIS_STATIC(NODE) \
4613 DECL_LANG_FLAG_6 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
4617 #define DECL_VLA_CAPTURE_P(NODE) \
4618 DECL_LANG_FLAG_1 (FIELD_DECL_CHECK (NODE))
4622 #define DECL_ARRAY_PARAMETER_P(NODE) \
4623 DECL_LANG_FLAG_1 (PARM_DECL_CHECK (NODE))
4627 #define DECL_INSTANTIATING_NSDMI_P(NODE) \
4628 DECL_LANG_FLAG_2 (FIELD_DECL_CHECK (NODE))
4632 #define DECL_FIELD_IS_BASE(NODE) \
4633 DECL_LANG_FLAG_6 (FIELD_DECL_CHECK (NODE))
4638 #define DECL_NORMAL_CAPTURE_P(NODE) \
4639 DECL_LANG_FLAG_7 (FIELD_DECL_CHECK (NODE))
4644 #define ANON_AGGR_TYPE_P(NODE) \
4645 (CLASS_TYPE_P (NODE) && LANG_TYPE_CLASS_CHECK (NODE)->anon_aggr)
4646 #define SET_ANON_AGGR_TYPE_P(NODE) \
4647 (LANG_TYPE_CLASS_CHECK (NODE)->anon_aggr = 1)
4650 #define ANON_UNION_TYPE_P(NODE) \
4651 (TREE_CODE (NODE) == UNION_TYPE && ANON_AGGR_TYPE_P (NODE))
4658 #define TYPE_WAS_UNNAMED(NODE) \
4659 (TYPE_NAME (TYPE_MAIN_VARIANT (NODE)) \
4660 != TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
4669 #define DECL_FRIENDLIST(NODE) (DECL_INITIAL (NODE))
4679 #define DECL_ACCESS(NODE) (LANG_DECL_MIN_CHECK (NODE)->access)
4682 #define DECL_GLOBAL_CTOR_P(NODE) \
4683 (LANG_DECL_FN_CHECK (NODE)->global_ctor_p)
4686 #define DECL_GLOBAL_DTOR_P(NODE) \
4687 (LANG_DECL_FN_CHECK (NODE)->global_dtor_p)
4705 #define DECL_TEMPLATE_PARMS(NODE) \
4706 ((struct tree_template_decl *)CONST_CAST_TREE (TEMPLATE_DECL_CHECK (NODE)))->arguments
4707 #define DECL_INNERMOST_TEMPLATE_PARMS(NODE) \
4708 INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (NODE))
4709 #define DECL_NTPARMS(NODE) \
4710 TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (NODE))
4715 #define DECL_TEMPLATE_RESULT(NODE) \
4716 ((struct tree_template_decl *)CONST_CAST_TREE(TEMPLATE_DECL_CHECK (NODE)))->result
4745 #define DECL_TEMPLATE_INSTANTIATIONS(NODE) \
4746 DECL_SIZE_UNIT (TEMPLATE_DECL_CHECK (NODE))
4758 #define DECL_TEMPLATE_SPECIALIZATIONS(NODE) \
4759 DECL_SIZE (TEMPLATE_DECL_CHECK (NODE))
4763 #define DECL_TEMPLATE_PARM_P(NODE) \
4764 (DECL_LANG_FLAG_0 (NODE) \
4765 && (TREE_CODE (NODE) == CONST_DECL \
4766 || TREE_CODE (NODE) == PARM_DECL \
4767 || TREE_CODE (NODE) == TYPE_DECL \
4768 || TREE_CODE (NODE) == TEMPLATE_DECL))
4771 #define TEMPLATE_PARM_P(NODE) \
4772 (TREE_CODE (NODE) == TEMPLATE_TYPE_PARM \
4773 || TREE_CODE (NODE) == TEMPLATE_TEMPLATE_PARM \
4774 || TREE_CODE (NODE) == TEMPLATE_PARM_INDEX)
4776 /* Mark NODE as a template parameter. */
4777 #define SET_DECL_TEMPLATE_PARM_P(NODE) \
4778 (DECL_LANG_FLAG_0 (NODE) = 1)
4780 /* Nonzero if NODE is a template template parameter. */
4781 #define DECL_TEMPLATE_TEMPLATE_PARM_P(NODE) \
4782 (TREE_CODE (NODE) == TEMPLATE_DECL && DECL_TEMPLATE_PARM_P (NODE))
4785 #define DECL_FUNCTION_TEMPLATE_P(NODE) \
4786 (TREE_CODE (NODE) == TEMPLATE_DECL \
4787 && DECL_TEMPLATE_RESULT (NODE) != NULL_TREE \
4788 && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == FUNCTION_DECL)
4792 #define DECL_TYPE_TEMPLATE_P(NODE) \
4793 (TREE_CODE (NODE) == TEMPLATE_DECL \
4794 && DECL_TEMPLATE_RESULT (NODE) != NULL_TREE \
4795 && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == TYPE_DECL)
4798 #define DECL_CLASS_TEMPLATE_P(NODE) \
4799 (DECL_TYPE_TEMPLATE_P (NODE) \
4800 && DECL_IMPLICIT_TYPEDEF_P (DECL_TEMPLATE_RESULT (NODE)))
4803 #define DECL_ALIAS_TEMPLATE_P(NODE) \
4804 (DECL_TYPE_TEMPLATE_P (NODE) \
4805 && !DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (NODE)))
4807 /* Nonzero for a NODE which declares a type. */
4808 #define DECL_DECLARES_TYPE_P(NODE) \
4809 (TREE_CODE (NODE) == TYPE_DECL || DECL_TYPE_TEMPLATE_P (NODE))
4811 /* Nonzero if NODE declares a function. */
4812 #define DECL_DECLARES_FUNCTION_P(NODE) \
4813 (TREE_CODE (NODE) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (NODE))
4815 /* Nonzero if NODE is the typedef implicitly generated for a type when
4822 #define DECL_IMPLICIT_TYPEDEF_P(NODE) \
4823 (TREE_CODE (NODE) == TYPE_DECL && DECL_LANG_FLAG_2 (NODE))
4824 #define SET_DECL_IMPLICIT_TYPEDEF_P(NODE) \
4825 (DECL_LANG_FLAG_2 (NODE) = 1)
4826 #define DECL_SELF_REFERENCE_P(NODE) \
4827 (TREE_CODE (NODE) == TYPE_DECL && DECL_LANG_FLAG_4 (NODE))
4828 #define SET_DECL_SELF_REFERENCE_P(NODE) \
4829 (DECL_LANG_FLAG_4 (NODE) = 1)
4837 #define DECL_PRIMARY_TEMPLATE(NODE) \
4838 (TREE_TYPE (DECL_INNERMOST_TEMPLATE_PARMS (NODE)))
4840 /* Returns nonzero if NODE is a primary template. */
4841 #define PRIMARY_TEMPLATE_P(NODE) (DECL_PRIMARY_TEMPLATE (NODE) == (NODE))
4843 /* Nonzero iff NODE is a specialization of a template. The value
4856 Note that NODE will be marked as a specialization even if the
4869 #define DECL_USE_TEMPLATE(NODE) (DECL_LANG_SPECIFIC (NODE)->u.base.use_template)
4872 #define CLASSTYPE_USE_TEMPLATE(NODE) \
4873 (LANG_TYPE_CLASS_CHECK (NODE)->use_template)
4875 /* True if NODE is a specialization of a primary template. */
4876 #define CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P(NODE) \
4877 (CLASS_TYPE_P (NODE) \
4878 && CLASSTYPE_USE_TEMPLATE (NODE) \
4879 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE)))
4881 #define DECL_TEMPLATE_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) & 1)
4882 #define CLASSTYPE_TEMPLATE_INSTANTIATION(NODE) \
4883 (CLASSTYPE_USE_TEMPLATE (NODE) & 1)
4885 #define DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) == 2)
4886 #define SET_DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) = 2)
4890 #define CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
4891 (CLASSTYPE_USE_TEMPLATE (NODE) == 2)
4892 #define SET_CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
4893 (CLASSTYPE_USE_TEMPLATE (NODE) = 2)
4895 #define DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 1)
4896 #define SET_DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 1)
4897 #define CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
4898 (CLASSTYPE_USE_TEMPLATE (NODE) == 1)
4899 #define SET_CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
4900 (CLASSTYPE_USE_TEMPLATE (NODE) = 1)
4902 #define DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 3)
4903 #define SET_DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 3)
4904 #define CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
4905 (CLASSTYPE_USE_TEMPLATE (NODE) == 3)
4906 #define SET_CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
4907 (CLASSTYPE_USE_TEMPLATE (NODE) = 3)
4941 #define DECL_TEMPLATE_INSTANTIATED(NODE) \
4942 DECL_LANG_FLAG_1 (VAR_OR_FUNCTION_DECL_CHECK (NODE))
4945 #define DECL_INTERFACE_KNOWN(NODE) DECL_LANG_FLAG_5 (NODE)
4954 #define DECL_NOT_REALLY_EXTERN(NODE) \
4955 (DECL_LANG_SPECIFIC (NODE)->u.base.not_really_extern)
4957 #define DECL_REALLY_EXTERN(NODE) \
4958 (DECL_EXTERNAL (NODE) \
4959 && (!DECL_LANG_SPECIFIC (NODE) || !DECL_NOT_REALLY_EXTERN (NODE)))
5022 /* For thunk NODE, this is the FUNCTION_DECL thunked to. It is
5024 #define THUNK_TARGET(NODE) \
5025 (LANG_DECL_FN_CHECK (NODE)->befriending_classes)
5029 #define QUALIFIED_NAME_IS_TEMPLATE(NODE) \
5030 (TREE_LANG_FLAG_1 (SCOPE_REF_CHECK (NODE)))
5035 /* True if NODE is a co-routine FUNCTION_DECL. */
5036 #define DECL_COROUTINE_P(NODE) \
5037 (LANG_DECL_FN_CHECK (DECL_COMMON_CHECK (NODE))->coroutine_p)
5041 #define DECL_ACTOR_FN(NODE) \
5042 (coro_get_actor_function ((NODE)))
5046 #define DECL_DESTROY_FN(NODE) \
5047 (coro_get_destroy_function ((NODE)))
5051 #define DECL_RAMP_FN(NODE) \
5052 (coro_get_ramp_function (NODE))
5056 #define OMP_ATOMIC_DEPENDENT_P(NODE) \
5057 (TREE_CODE (TREE_OPERAND (OMP_ATOMIC_CHECK (NODE), 0)) == INTEGER_CST \
5058 || TREE_CODE (TREE_OPERAND (OMP_ATOMIC_CHECK (NODE), 0)) == OMP_CLAUSE)
5061 #define OMP_FOR_GIMPLIFYING_P(NODE) \
5062 (TREE_LANG_FLAG_0 (OMP_LOOPING_CHECK (NODE)))
5067 #define CP_OMP_CLAUSE_INFO(NODE) \
5068 TREE_TYPE (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_PRIVATE, \
5072 #define TRANSACTION_EXPR_IS_STMT(NODE) \
5073 TREE_LANG_FLAG_0 (TRANSACTION_EXPR_CHECK (NODE))
5077 #define TRY_STMTS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 0)
5078 #define TRY_HANDLERS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 1)
5080 #define EH_SPEC_STMTS(NODE) TREE_OPERAND (EH_SPEC_BLOCK_CHECK (NODE), 0)
5081 #define EH_SPEC_RAISES(NODE) TREE_OPERAND (EH_SPEC_BLOCK_CHECK (NODE), 1)
5083 #define USING_STMT_NAMESPACE(NODE) TREE_OPERAND (USING_STMT_CHECK (NODE), 0)
5086 #define FN_TRY_BLOCK_P(NODE) TREE_LANG_FLAG_3 (TRY_BLOCK_CHECK (NODE))
5087 #define HANDLER_PARMS(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 0)
5088 #define HANDLER_BODY(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 1)
5089 #define HANDLER_TYPE(NODE) TREE_TYPE (HANDLER_CHECK (NODE))
5093 #define CLEANUP_BODY(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 0)
5094 #define CLEANUP_EXPR(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 1)
5095 #define CLEANUP_DECL(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 2)
5100 #define IF_COND(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 0)
5101 #define THEN_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 1)
5102 #define ELSE_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 2)
5103 #define IF_SCOPE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 3)
5104 #define IF_STMT_CONSTEXPR_P(NODE) TREE_LANG_FLAG_0 (IF_STMT_CHECK (NODE))
5108 #define IF_STMT_EXTRA_ARGS(NODE) IF_SCOPE (NODE)
5112 #define WHILE_COND(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0)
5113 #define WHILE_BODY(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1)
5117 #define DO_COND(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 0)
5118 #define DO_BODY(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 1)
5123 #define FOR_INIT_STMT(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 0)
5124 #define FOR_COND(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 1)
5125 #define FOR_EXPR(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
5126 #define FOR_BODY(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
5127 #define FOR_SCOPE(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 4)
5131 #define RANGE_FOR_DECL(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 0)
5132 #define RANGE_FOR_EXPR(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 1)
5133 #define RANGE_FOR_BODY(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 2)
5134 #define RANGE_FOR_SCOPE(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 3)
5135 #define RANGE_FOR_UNROLL(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 4)
5136 #define RANGE_FOR_INIT_STMT(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 5)
5137 #define RANGE_FOR_IVDEP(NODE) TREE_LANG_FLAG_6 (RANGE_FOR_STMT_CHECK (NODE))
5139 #define SWITCH_STMT_COND(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0)
5140 #define SWITCH_STMT_BODY(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1)
5141 #define SWITCH_STMT_TYPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
5142 #define SWITCH_STMT_SCOPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 3)
5146 #define SWITCH_STMT_ALL_CASES_P(NODE) \
5147 TREE_LANG_FLAG_0 (SWITCH_STMT_CHECK (NODE))
5149 #define SWITCH_STMT_NO_BREAK_P(NODE) \
5150 TREE_LANG_FLAG_2 (SWITCH_STMT_CHECK (NODE))
5153 #define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0)
5157 #define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0)
5161 #define TARGET_EXPR_IMPLICIT_P(NODE) \
5162 TREE_LANG_FLAG_0 (TARGET_EXPR_CHECK (NODE))
5166 #define TARGET_EXPR_LIST_INIT_P(NODE) \
5167 TREE_LANG_FLAG_1 (TARGET_EXPR_CHECK (NODE))
5171 #define TARGET_EXPR_DIRECT_INIT_P(NODE) \
5172 TREE_LANG_FLAG_2 (TARGET_EXPR_CHECK (NODE))
5174 /* True if NODE is a TARGET_EXPR that just expresses a copy of its INITIAL; if
5176 #define SIMPLE_TARGET_EXPR_P(NODE) \
5177 (TREE_CODE (NODE) == TARGET_EXPR \
5178 && TARGET_EXPR_INITIAL (NODE) \
5179 && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (NODE))))
5188 #define CONVERT_EXPR_VBASE_PATH(NODE) \
5189 TREE_LANG_FLAG_0 (CONVERT_EXPR_CHECK (NODE))
5192 #define SIZEOF_EXPR_TYPE_P(NODE) \
5193 TREE_LANG_FLAG_0 (SIZEOF_EXPR_CHECK (NODE))
5196 #define ALIGNOF_EXPR_STD_P(NODE) \
5197 TREE_LANG_FLAG_0 (ALIGNOF_EXPR_CHECK (NODE))
5203 #define OMP_DEPOBJ_DEPOBJ(NODE) TREE_OPERAND (OMP_DEPOBJ_CHECK (NODE), 0)
5204 #define OMP_DEPOBJ_CLAUSES(NODE) TREE_OPERAND (OMP_DEPOBJ_CHECK (NODE), 1)
5742 #define TEMPLATE_PARM_INDEX_CAST(NODE) \
5743 ((template_parm_index*)TEMPLATE_PARM_INDEX_CHECK (NODE))
5744 #define TEMPLATE_PARM_IDX(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->index)
5745 #define TEMPLATE_PARM_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->level)
5746 #define TEMPLATE_PARM_DESCENDANTS(NODE) (TREE_CHAIN (NODE))
5747 #define TEMPLATE_PARM_ORIG_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->orig_level)
5748 #define TEMPLATE_PARM_DECL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->decl)
5749 #define TEMPLATE_PARM_PARAMETER_PACK(NODE) \
5750 (TREE_LANG_FLAG_0 (TEMPLATE_PARM_INDEX_CHECK (NODE)))
5754 #define TEMPLATE_TYPE_PARM_INDEX(NODE) \
5755 (TYPE_VALUES_RAW (TREE_CHECK3 ((NODE), TEMPLATE_TYPE_PARM, \
5758 #define TEMPLATE_TYPE_IDX(NODE) \
5759 (TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (NODE)))
5760 #define TEMPLATE_TYPE_LEVEL(NODE) \
5761 (TEMPLATE_PARM_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
5762 #define TEMPLATE_TYPE_ORIG_LEVEL(NODE) \
5763 (TEMPLATE_PARM_ORIG_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
5764 #define TEMPLATE_TYPE_DECL(NODE) \
5765 (TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
5766 #define TEMPLATE_TYPE_PARAMETER_PACK(NODE) \
5767 (TEMPLATE_PARM_PARAMETER_PACK (TEMPLATE_TYPE_PARM_INDEX (NODE)))
5770 #define CLASS_PLACEHOLDER_TEMPLATE(NODE) \
5771 (DECL_INITIAL (TYPE_NAME (TEMPLATE_TYPE_PARM_CHECK (NODE))))
5788 #define TEMPLATE_TYPE_PARM_FOR_CLASS(NODE) \
5789 (TREE_LANG_FLAG_0 (TEMPLATE_TYPE_PARM_CHECK (NODE)))
5792 #define AUTO_IS_DECLTYPE(NODE) \
5793 (TYPE_LANG_FLAG_5 (TEMPLATE_TYPE_PARM_CHECK (NODE)))
5850 #define TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL(NODE) \
5851 ((TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM) \
5852 ? TYPE_TI_TEMPLATE (NODE) \
5853 : TYPE_NAME (NODE))
5912 #define IDENTIFIER_OVL_OP_INFO(NODE) \
5913 (&ovl_op_info[IDENTIFIER_KIND_BIT_0 (NODE)][IDENTIFIER_CP_INDEX (NODE)])
5914 #define IDENTIFIER_OVL_OP_FLAGS(NODE) \
5915 (IDENTIFIER_OVL_OP_INFO (NODE)->flags)