Lines Matching refs:NODE
171 The BV_DELTA of each node gives the amount by which to adjust the
177 The BV_VCALL_INDEX of each node, if non-NULL, gives the vtable
203 #define VAR_OR_FUNCTION_DECL_CHECK(NODE) \
204 TREE_CHECK2(NODE,VAR_DECL,FUNCTION_DECL)
206 #define TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK(NODE) \
207 TREE_CHECK3(NODE,TYPE_DECL,TEMPLATE_DECL,FUNCTION_DECL)
209 #define TYPE_FUNCTION_OR_TEMPLATE_DECL_P(NODE) \
210 (TREE_CODE (NODE) == TYPE_DECL || TREE_CODE (NODE) == TEMPLATE_DECL \
211 || TREE_CODE (NODE) == FUNCTION_DECL)
213 #define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) \
214 TREE_CHECK3(NODE,VAR_DECL,FUNCTION_DECL,PARM_DECL)
216 #define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) \
217 TREE_CHECK4(NODE,VAR_DECL,FUNCTION_DECL,TYPE_DECL,TEMPLATE_DECL)
219 #define VAR_TEMPL_TYPE_FIELD_OR_FUNCTION_DECL_CHECK(NODE) \
220 TREE_CHECK5(NODE,VAR_DECL,FIELD_DECL,FUNCTION_DECL,TYPE_DECL,TEMPLATE_DECL)
222 #define BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK(NODE) \
223 TREE_CHECK(NODE,BOUND_TEMPLATE_TEMPLATE_PARM)
226 #define THUNK_FUNCTION_CHECK(NODE) __extension__ \
227 ({ __typeof (NODE) const __t = (NODE); \
233 #define THUNK_FUNCTION_CHECK(NODE) (NODE)
248 keyword. C_RID_CODE (node) is then the RID_* value of the keyword,
253 #define LANG_IDENTIFIER_CAST(NODE) \
254 ((struct lang_identifier*)IDENTIFIER_NODE_CHECK (NODE))
271 #define IDENTIFIER_GLOBAL_VALUE(NODE) \
272 namespace_binding ((NODE), global_namespace)
273 #define SET_IDENTIFIER_GLOBAL_VALUE(NODE, VAL) \
274 set_namespace_binding ((NODE), global_namespace, (VAL))
275 #define IDENTIFIER_NAMESPACE_VALUE(NODE) \
276 namespace_binding ((NODE), current_namespace)
277 #define SET_IDENTIFIER_NAMESPACE_VALUE(NODE, VAL) \
278 set_namespace_binding ((NODE), current_namespace, (VAL))
280 #define CLEANUP_P(NODE) TREE_LANG_FLAG_0 (TRY_BLOCK_CHECK (NODE))
282 #define BIND_EXPR_TRY_BLOCK(NODE) \
283 TREE_LANG_FLAG_0 (BIND_EXPR_CHECK (NODE))
286 #define BIND_EXPR_BODY_BLOCK(NODE) \
287 TREE_LANG_FLAG_3 (BIND_EXPR_CHECK (NODE))
288 #define FUNCTION_NEEDS_BODY_BLOCK(NODE) \
289 (DECL_CONSTRUCTOR_P (NODE) || DECL_DESTRUCTOR_P (NODE) \
290 || LAMBDA_FUNCTION_P (NODE))
292 #define STATEMENT_LIST_NO_SCOPE(NODE) \
293 TREE_LANG_FLAG_0 (STATEMENT_LIST_CHECK (NODE))
294 #define STATEMENT_LIST_TRY_BLOCK(NODE) \
295 TREE_LANG_FLAG_2 (STATEMENT_LIST_CHECK (NODE))
300 #define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE))
303 #define EXPR_STMT_STMT_EXPR_RESULT(NODE) \
304 TREE_LANG_FLAG_0 (EXPR_STMT_CHECK (NODE))
307 #define STMT_EXPR_NO_SCOPE(NODE) \
308 TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
315 /* Returns nonzero iff NODE is a declaration for the global function
317 #define DECL_MAIN_P(NODE) \
318 (DECL_EXTERN_C_FUNCTION_P (NODE) \
319 && DECL_NAME (NODE) != NULL_TREE \
320 && MAIN_NAME_P (DECL_NAME (NODE)) \
324 #define OVL_FUNCTION(NODE) \
325 (((struct tree_overload*)OVERLOAD_CHECK (NODE))->function)
326 #define OVL_CHAIN(NODE) TREE_CHAIN (NODE)
328 #define OVL_CURRENT(NODE) \
329 ((TREE_CODE (NODE) == OVERLOAD) ? OVL_FUNCTION (NODE) : (NODE))
330 #define OVL_NEXT(NODE) \
331 ((TREE_CODE (NODE) == OVERLOAD) ? TREE_CHAIN (NODE) : NULL_TREE)
334 is not important for this node. */
335 #define OVL_USED(NODE) TREE_USED (NODE)
338 #define OVL_ARG_DEPENDENT(NODE) TREE_LANG_FLAG_0 (OVERLOAD_CHECK (NODE))
345 /* Returns true iff NODE is a BASELINK. */
346 #define BASELINK_P(NODE) \
347 (TREE_CODE (NODE) == BASELINK)
350 #define BASELINK_BINFO(NODE) \
351 (((struct tree_baselink*) BASELINK_CHECK (NODE))->binfo)
354 #define BASELINK_FUNCTIONS(NODE) \
355 (((struct tree_baselink*) BASELINK_CHECK (NODE))->functions)
359 #define BASELINK_ACCESS_BINFO(NODE) \
360 (((struct tree_baselink*) BASELINK_CHECK (NODE))->access_binfo)
366 #define BASELINK_OPTYPE(NODE) \
367 (TREE_CHAIN (BASELINK_CHECK (NODE)))
369 #define BASELINK_QUALIFIED_P(NODE) \
370 TREE_LANG_FLAG_0 (BASELINK_CHECK (NODE))
474 #define IDENTIFIER_NAMESPACE_BINDINGS(NODE) \
475 (LANG_IDENTIFIER_CAST (NODE)->namespace_bindings)
476 #define IDENTIFIER_TEMPLATE(NODE) \
477 (LANG_IDENTIFIER_CAST (NODE)->class_template_info)
482 name lookup consists simply of pulling off the node at the front
486 #define IDENTIFIER_BINDING(NODE) \
487 (LANG_IDENTIFIER_CAST (NODE)->bindings)
493 #define IDENTIFIER_TYPE_VALUE(NODE) identifier_type_value (NODE)
494 #define REAL_IDENTIFIER_TYPE_VALUE(NODE) TREE_TYPE (NODE)
495 #define SET_IDENTIFIER_TYPE_VALUE(NODE,TYPE) (TREE_TYPE (NODE) = (TYPE))
496 #define IDENTIFIER_HAS_TYPE_VALUE(NODE) (IDENTIFIER_TYPE_VALUE (NODE) ? 1 : 0)
498 #define IDENTIFIER_LABEL_VALUE(NODE) \
499 (LANG_IDENTIFIER_CAST (NODE)->label_value)
500 #define SET_IDENTIFIER_LABEL_VALUE(NODE, VALUE) \
501 IDENTIFIER_LABEL_VALUE (NODE) = (VALUE)
505 #define IDENTIFIER_VIRTUAL_P(NODE) TREE_LANG_FLAG_1 (NODE)
509 #define IDENTIFIER_OPNAME_P(NODE) TREE_LANG_FLAG_2 (NODE)
513 #define IDENTIFIER_TYPENAME_P(NODE) \
514 TREE_LANG_FLAG_4 (NODE)
518 #define IDENTIFIER_CTOR_OR_DTOR_P(NODE) \
519 TREE_LANG_FLAG_3 (NODE)
533 #define DEFARG_TOKENS(NODE) \
534 (((struct tree_default_arg *)DEFAULT_ARG_CHECK (NODE))->tokens)
535 #define DEFARG_INSTANTIATIONS(NODE) \
536 (((struct tree_default_arg *)DEFAULT_ARG_CHECK (NODE))->instantiations)
545 #define DEFERRED_NOEXCEPT_PATTERN(NODE) \
546 (((struct tree_deferred_noexcept *)DEFERRED_NOEXCEPT_CHECK (NODE))->pattern)
547 #define DEFERRED_NOEXCEPT_ARGS(NODE) \
548 (((struct tree_deferred_noexcept *)DEFERRED_NOEXCEPT_CHECK (NODE))->args)
549 #define DEFERRED_NOEXCEPT_SPEC_P(NODE) \
550 ((NODE) && (TREE_PURPOSE (NODE)) \
551 && (TREE_CODE (TREE_PURPOSE (NODE)) == DEFERRED_NOEXCEPT \
552 || is_overloaded_fn (TREE_PURPOSE (NODE))))
563 #define STATIC_ASSERT_CONDITION(NODE) \
564 (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->condition)
569 #define STATIC_ASSERT_MESSAGE(NODE) \
570 (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->message)
573 #define STATIC_ASSERT_SOURCE_LOCATION(NODE) \
574 (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->location)
620 #define TRAIT_EXPR_TYPE1(NODE) \
621 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->type1)
623 #define TRAIT_EXPR_TYPE2(NODE) \
624 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->type2)
627 #define TRAIT_EXPR_KIND(NODE) \
628 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->kind)
638 #define LAMBDA_TYPE_P(NODE) \
639 (CLASS_TYPE_P (NODE) && CLASSTYPE_LAMBDA_EXPR (NODE))
653 #define LAMBDA_EXPR_DEFAULT_CAPTURE_MODE(NODE) \
654 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->default_capture_mode)
662 #define LAMBDA_EXPR_CAPTURE_LIST(NODE) \
663 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->capture_list)
665 /* During parsing of the lambda-introducer, the node in the capture-list
667 capture proxy for that node. */
668 #define LAMBDA_EXPR_THIS_CAPTURE(NODE) \
669 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->this_capture)
672 #define LAMBDA_EXPR_CAPTURES_THIS_P(NODE) \
673 LAMBDA_EXPR_THIS_CAPTURE(NODE)
676 #define LAMBDA_EXPR_MUTABLE_P(NODE) \
677 TREE_LANG_FLAG_1 (LAMBDA_EXPR_CHECK (NODE))
681 #define LAMBDA_EXPR_RETURN_TYPE(NODE) \
682 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->return_type)
685 #define LAMBDA_EXPR_LOCATION(NODE) \
686 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->locus)
690 #define LAMBDA_EXPR_EXTRA_SCOPE(NODE) \
691 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->extra_scope)
694 #define LAMBDA_EXPR_DISCRIMINATOR(NODE) \
695 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->discriminator)
699 #define LAMBDA_EXPR_PENDING_PROXIES(NODE) \
700 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->pending_proxies)
705 #define LAMBDA_EXPR_CLOSURE(NODE) \
706 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->closure)
746 #define TINFO_HAS_ACCESS_ERRORS(NODE) \
747 (TREE_LANG_FLAG_0 (TEMPLATE_INFO_CHECK (NODE)))
748 #define FNDECL_HAS_ACCESS_ERRORS(NODE) \
749 (TINFO_HAS_ACCESS_ERRORS (DECL_TEMPLATE_INFO (NODE)))
984 /* Node to indicate default access. This must be distinct from the
1054 active template parameters. Each node in the list represents one
1057 TREE_PURPOSE of each node. The parameters for that level are
1204 #define TYPE_IDENTIFIER(NODE) (DECL_NAME (TYPE_NAME (NODE)))
1205 #define TYPE_LINKAGE_IDENTIFIER(NODE) \
1206 (TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (NODE)))
1207 #define TYPE_NAME_STRING(NODE) (IDENTIFIER_POINTER (TYPE_IDENTIFIER (NODE)))
1208 #define TYPE_NAME_LENGTH(NODE) (IDENTIFIER_LENGTH (TYPE_IDENTIFIER (NODE)))
1210 /* Nonzero if NODE has no name for linkage purposes. */
1211 #define TYPE_ANONYMOUS_P(NODE) \
1212 (TAGGED_TYPE_P (NODE) && ANON_AGGRNAME_P (TYPE_LINKAGE_IDENTIFIER (NODE)))
1215 #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
1254 #define TYPE_FOR_JAVA(NODE) TYPE_LANG_FLAG_3 (NODE)
1258 #define TYPE_DEPENDENT_P(NODE) TYPE_LANG_FLAG_0 (NODE)
1262 #define TYPE_DEPENDENT_P_VALID(NODE) TYPE_LANG_FLAG_6(NODE)
1265 #define CP_TYPE_CONST_P(NODE) \
1266 ((cp_type_quals (NODE) & TYPE_QUAL_CONST) != 0)
1269 #define CP_TYPE_VOLATILE_P(NODE) \
1270 ((cp_type_quals (NODE) & TYPE_QUAL_VOLATILE) != 0)
1273 #define CP_TYPE_RESTRICT_P(NODE) \
1274 ((cp_type_quals (NODE) & TYPE_QUAL_RESTRICT) != 0)
1280 #define CP_TYPE_CONST_NON_VOLATILE_P(NODE) \
1281 ((cp_type_quals (NODE) & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)) \
1284 #define FUNCTION_ARG_CHAIN(NODE) \
1285 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (NODE)))
1289 #define FUNCTION_FIRST_USER_PARMTYPE(NODE) \
1290 skip_artificial_parms_for ((NODE), TYPE_ARG_TYPES (TREE_TYPE (NODE)))
1293 #define FUNCTION_FIRST_USER_PARM(NODE) \
1294 skip_artificial_parms_for ((NODE), DECL_ARGUMENTS (NODE))
1449 #define LANG_TYPE_CLASS_CHECK(NODE) __extension__ \
1450 ({ struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE); \
1455 #define LANG_TYPE_PTRMEM_CHECK(NODE) __extension__ \
1456 ({ struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE); \
1463 #define LANG_TYPE_CLASS_CHECK(NODE) (&TYPE_LANG_SPECIFIC (NODE)->u.c)
1464 #define LANG_TYPE_PTRMEM_CHECK(NODE) (&TYPE_LANG_SPECIFIC (NODE)->u.ptrmem)
1469 #define TYPE_GETS_DELETE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->gets_delete)
1470 #define TYPE_GETS_REG_DELETE(NODE) (TYPE_GETS_DELETE (NODE) & 1)
1472 /* Nonzero if `new NODE[x]' should cause the allocation of extra
1474 #define TYPE_VEC_NEW_USES_COOKIE(NODE) \
1475 (CLASS_TYPE_P (NODE) \
1476 && LANG_TYPE_CLASS_CHECK (NODE)->vec_new_uses_cookie)
1478 /* Nonzero means that this _CLASSTYPE node defines ways of converting
1480 #define TYPE_HAS_CONVERSION(NODE) \
1481 (LANG_TYPE_CLASS_CHECK (NODE)->h.has_type_conversion)
1483 /* Nonzero means that NODE (a class type) has a default constructor --
1485 #define CLASSTYPE_LAZY_DEFAULT_CTOR(NODE) \
1486 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_default_ctor)
1488 /* Nonzero means that NODE (a class type) has a copy constructor --
1490 #define CLASSTYPE_LAZY_COPY_CTOR(NODE) \
1491 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_copy_ctor)
1493 /* Nonzero means that NODE (a class type) has a move constructor --
1495 #define CLASSTYPE_LAZY_MOVE_CTOR(NODE) \
1496 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_move_ctor)
1498 /* Nonzero means that NODE (a class type) has an assignment operator
1500 #define CLASSTYPE_LAZY_COPY_ASSIGN(NODE) \
1501 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_copy_assign)
1503 /* Nonzero means that NODE (a class type) has an assignment operator
1505 #define CLASSTYPE_LAZY_MOVE_ASSIGN(NODE) \
1506 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_move_assign)
1508 /* Nonzero means that NODE (a class type) has a destructor -- but that
1510 #define CLASSTYPE_LAZY_DESTRUCTOR(NODE) \
1511 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_destructor)
1513 /* Nonzero means that NODE (a class type) is final */
1514 #define CLASSTYPE_FINAL(NODE) \
1515 (LANG_TYPE_CLASS_CHECK (NODE)->is_final)
1518 /* Nonzero means that this _CLASSTYPE node overloads operator=(X&). */
1519 #define TYPE_HAS_COPY_ASSIGN(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_copy_assign)
1521 /* True iff the class type NODE has an "operator =" whose parameter
1523 #define TYPE_HAS_CONST_COPY_ASSIGN(NODE) \
1524 (LANG_TYPE_CLASS_CHECK (NODE)->h.has_const_copy_assign)
1526 /* Nonzero means that this _CLASSTYPE node has an X(X&) constructor. */
1527 #define TYPE_HAS_COPY_CTOR(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->h.has_copy_ctor)
1528 #define TYPE_HAS_CONST_COPY_CTOR(NODE) \
1529 (LANG_TYPE_CLASS_CHECK (NODE)->has_const_copy_ctor)
1532 #define TYPE_HAS_LIST_CTOR(NODE) \
1533 (LANG_TYPE_CLASS_CHECK (NODE)->has_list_ctor)
1538 #define TYPE_HAS_CONSTEXPR_CTOR(NODE) \
1539 (LANG_TYPE_CLASS_CHECK (NODE)->has_constexpr_ctor)
1543 #define TYPE_HAS_NEW_OPERATOR(NODE) \
1544 (LANG_TYPE_CLASS_CHECK (NODE)->has_new)
1547 #define TYPE_HAS_ARRAY_NEW_OPERATOR(NODE) \
1548 (LANG_TYPE_CLASS_CHECK (NODE)->has_array_new)
1552 #define TYPE_BEING_DEFINED(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->being_defined)
1556 #define COMPLETE_OR_OPEN_TYPE_P(NODE) \
1557 (COMPLETE_TYPE_P (NODE) || (CLASS_TYPE_P (NODE) && TYPE_BEING_DEFINED (NODE)))
1560 #define TYPE_MARKED_P(NODE) TREE_LANG_FLAG_6 (TYPE_CHECK (NODE))
1562 /* Nonzero if the class NODE has multiple paths to the same (virtual)
1564 #define CLASSTYPE_DIAMOND_SHAPED_P(NODE) \
1565 (LANG_TYPE_CLASS_CHECK(NODE)->diamond_shaped)
1567 /* Nonzero if the class NODE has multiple instances of the same base
1569 #define CLASSTYPE_REPEATED_BASE_P(NODE) \
1570 (LANG_TYPE_CLASS_CHECK(NODE)->repeated_base)
1575 #define CLASSTYPE_KEY_METHOD(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->key_method)
1589 #define CLASSTYPE_METHOD_VEC(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->methods)
1595 #define CLASSTYPE_DECL_LIST(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->decl_list)
1607 /* A FUNCTION_DECL or OVERLOAD for the constructors for NODE. These
1609 #define CLASSTYPE_CONSTRUCTORS(NODE) \
1610 ((*CLASSTYPE_METHOD_VEC (NODE))[CLASSTYPE_CONSTRUCTOR_SLOT])
1612 /* A FUNCTION_DECL for the destructor for NODE. These are the
1616 #define CLASSTYPE_DESTRUCTORS(NODE) \
1617 (CLASSTYPE_METHOD_VEC (NODE) \
1618 ? (*CLASSTYPE_METHOD_VEC (NODE))[CLASSTYPE_DESTRUCTOR_SLOT] \
1624 #define CLASSTYPE_NESTED_UTDS(NODE) \
1625 (LANG_TYPE_CLASS_CHECK (NODE)->nested_udts)
1627 /* Nonzero if NODE has a primary base class, i.e., a base class with
1629 #define CLASSTYPE_HAS_PRIMARY_BASE_P(NODE) \
1630 (CLASSTYPE_PRIMARY_BINFO (NODE) != NULL_TREE)
1635 #define CLASSTYPE_PRIMARY_BINFO(NODE) \
1636 (LANG_TYPE_CLASS_CHECK (NODE)->primary_base)
1642 #define CLASSTYPE_VBASECLASSES(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->vbases)
1644 /* The type corresponding to NODE when NODE is used as a base class,
1645 i.e., NODE without virtual base classes. */
1647 #define CLASSTYPE_AS_BASE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->as_base)
1649 /* True iff NODE is the CLASSTYPE_AS_BASE version of some type. */
1651 #define IS_FAKE_BASE_TYPE(NODE) \
1652 (TREE_CODE (NODE) == RECORD_TYPE \
1653 && TYPE_CONTEXT (NODE) && CLASS_TYPE_P (TYPE_CONTEXT (NODE)) \
1654 && CLASSTYPE_AS_BASE (TYPE_CONTEXT (NODE)) == (NODE))
1658 #define CLASSTYPE_SIZE(NODE) TYPE_SIZE (CLASSTYPE_AS_BASE (NODE))
1659 #define CLASSTYPE_SIZE_UNIT(NODE) TYPE_SIZE_UNIT (CLASSTYPE_AS_BASE (NODE))
1660 #define CLASSTYPE_ALIGN(NODE) TYPE_ALIGN (CLASSTYPE_AS_BASE (NODE))
1661 #define CLASSTYPE_USER_ALIGN(NODE) TYPE_USER_ALIGN (CLASSTYPE_AS_BASE (NODE))
1663 /* The alignment of NODE, without its virtual bases, in bytes. */
1664 #define CLASSTYPE_ALIGN_UNIT(NODE) \
1665 (CLASSTYPE_ALIGN (NODE) / BITS_PER_UNIT)
1669 #define TYPE_JAVA_INTERFACE(NODE) \
1670 (LANG_TYPE_CLASS_CHECK (NODE)->java_interface)
1675 #define CLASSTYPE_PURE_VIRTUALS(NODE) \
1676 (LANG_TYPE_CLASS_CHECK (NODE)->pure_virtuals)
1679 #define ABSTRACT_CLASS_TYPE_P(NODE) \
1680 (CLASS_TYPE_P (NODE) && CLASSTYPE_PURE_VIRTUALS(NODE))
1683 #define TYPE_HAS_DEFAULT_CONSTRUCTOR(NODE) \
1684 (LANG_TYPE_CLASS_CHECK (NODE)->h.has_default_ctor)
1687 #define CLASSTYPE_HAS_MUTABLE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_mutable)
1688 #define TYPE_HAS_MUTABLE_P(NODE) (cp_has_mutable_p (NODE))
1692 #define CLASSTYPE_NON_LAYOUT_POD_P(NODE) \
1693 (LANG_TYPE_CLASS_CHECK (NODE)->non_pod_class)
1696 #define CLASSTYPE_NON_STD_LAYOUT(NODE) \
1697 (LANG_TYPE_CLASS_CHECK (NODE)->non_std_layout)
1702 #define CLASSTYPE_NON_ZERO_INIT_P(NODE) \
1703 (LANG_TYPE_CLASS_CHECK (NODE)->non_zero_init)
1706 #define CLASSTYPE_EMPTY_P(NODE) \
1707 (LANG_TYPE_CLASS_CHECK (NODE)->empty_p)
1711 #define CLASSTYPE_NEARLY_EMPTY_P(NODE) \
1712 (LANG_TYPE_CLASS_CHECK (NODE)->nearly_empty_p)
1715 #define CLASSTYPE_CONTAINS_EMPTY_CLASS_P(NODE) \
1716 (LANG_TYPE_CLASS_CHECK (NODE)->contains_empty_class_p)
1721 #define CLASSTYPE_FRIEND_CLASSES(NODE) \
1722 (LANG_TYPE_CLASS_CHECK (NODE)->friend_classes)
1725 #define CLASSTYPE_BEFRIENDING_CLASSES(NODE) \
1726 (LANG_TYPE_CLASS_CHECK (NODE)->befriending_classes)
1729 #define CLASSTYPE_LAMBDA_EXPR(NODE) \
1730 (LANG_TYPE_CLASS_CHECK (NODE)->lambda_expr)
1732 #define LAMBDA_TYPE_EXTRA_SCOPE(NODE) \
1733 (LAMBDA_EXPR_EXTRA_SCOPE (CLASSTYPE_LAMBDA_EXPR (NODE)))
1735 /* Say whether this node was declared as a "class" or a "struct". */
1736 #define CLASSTYPE_DECLARED_CLASS(NODE) \
1737 (LANG_TYPE_CLASS_CHECK (NODE)->declared_class)
1741 #define CLASSTYPE_READONLY_FIELDS_NEED_INIT(NODE) \
1742 (TYPE_LANG_SPECIFIC (NODE) \
1743 ? LANG_TYPE_CLASS_CHECK (NODE)->h.const_needs_init : 0)
1744 #define SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT(NODE, VALUE) \
1745 (LANG_TYPE_CLASS_CHECK (NODE)->h.const_needs_init = (VALUE))
1749 #define CLASSTYPE_REF_FIELDS_NEED_INIT(NODE) \
1750 (TYPE_LANG_SPECIFIC (NODE) \
1751 ? LANG_TYPE_CLASS_CHECK (NODE)->h.ref_needs_init : 0)
1752 #define SET_CLASSTYPE_REF_FIELDS_NEED_INIT(NODE, VALUE) \
1753 (LANG_TYPE_CLASS_CHECK (NODE)->h.ref_needs_init = (VALUE))
1757 #define CLASSTYPE_INTERFACE_ONLY(NODE) \
1758 (LANG_TYPE_CLASS_CHECK (NODE)->interface_only)
1765 #define CLASSTYPE_INTERFACE_KNOWN(NODE) \
1766 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown == 0)
1768 #define CLASSTYPE_INTERFACE_UNKNOWN(NODE) \
1769 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown)
1771 #define SET_CLASSTYPE_INTERFACE_UNKNOWN_X(NODE,X) \
1772 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = !!(X))
1773 #define SET_CLASSTYPE_INTERFACE_UNKNOWN(NODE) \
1774 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = 1)
1775 #define SET_CLASSTYPE_INTERFACE_KNOWN(NODE) \
1776 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = 0)
1778 /* Nonzero if a _DECL node requires us to output debug info for this class. */
1779 #define CLASSTYPE_DEBUG_REQUESTED(NODE) \
1780 (LANG_TYPE_CLASS_CHECK (NODE)->debug_requested)
1786 #define BINFO_VTABLE_PATH_MARKED(NODE) BINFO_FLAG_1 (NODE)
1810 #define BINFO_DEPENDENT_BASE_P(NODE) BINFO_FLAG_3 (NODE)
1815 #define BINFO_LOST_PRIMARY_P(NODE) BINFO_FLAG_4 (NODE)
1818 #define BINFO_PRIMARY_P(NODE) BINFO_FLAG_5(NODE)
1821 #define IDENTIFIER_MARKED(NODE) TREE_LANG_FLAG_0 (NODE)
1825 NODE. The PURPOSE of each element is a FUNCTION_DECL for a virtual
1827 vcall offset for that function is stored, when NODE is a virtual
1829 #define CLASSTYPE_VCALL_INDICES(NODE) \
1830 (LANG_TYPE_CLASS_CHECK (NODE)->vcall_indices)
1832 /* The various vtables for the class NODE. The primary vtable will be
1834 #define CLASSTYPE_VTABLES(NODE) \
1835 (LANG_TYPE_CLASS_CHECK (NODE)->vtables)
1840 #define CLASSTYPE_TYPEINFO_VAR(NODE) \
1841 (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var)
1848 #define BV_DELTA(NODE) (TREE_PURPOSE (NODE))
1853 #define BV_VCALL_INDEX(NODE) (TREE_TYPE (NODE))
1856 #define BV_FN(NODE) (TREE_VALUE (NODE))
1859 #define BV_LOST_PRIMARY(NODE) (TREE_LANG_FLAG_0 (NODE))
1870 #define TYPE_RAISES_EXCEPTIONS(NODE) TYPE_LANG_SLOT_1 (NODE)
1874 #define TYPE_NOTHROW_P(NODE) nothrow_spec_p (TYPE_RAISES_EXCEPTIONS (NODE))
1876 /* For FUNCTION_TYPE or METHOD_TYPE, true if NODE is noexcept. This is the
1879 #define TYPE_NOEXCEPT_P(NODE) type_noexcept_p (NODE)
1882 #define NAMESPACE_LEVEL(NODE) \
1883 (LANG_DECL_NS_CHECK (NODE)->level)
1908 #define LANG_DECL_HAS_MIN(NODE) \
1909 (TREE_CODE (NODE) == FUNCTION_DECL \
1910 || TREE_CODE (NODE) == FIELD_DECL \
1911 || TREE_CODE (NODE) == VAR_DECL \
1912 || TREE_CODE (NODE) == CONST_DECL \
1913 || TREE_CODE (NODE) == TYPE_DECL \
1914 || TREE_CODE (NODE) == TEMPLATE_DECL \
1915 || TREE_CODE (NODE) == USING_DECL)
2030 #define STRIP_TEMPLATE(NODE) \
2031 (TREE_CODE (NODE) == TEMPLATE_DECL ? DECL_TEMPLATE_RESULT (NODE) : NODE)
2035 #define LANG_DECL_MIN_CHECK(NODE) __extension__ \
2036 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2037 if (!LANG_DECL_HAS_MIN (NODE)) \
2044 #define LANG_DECL_FN_CHECK(NODE) __extension__ \
2045 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (STRIP_TEMPLATE (NODE)); \
2046 if (!DECL_DECLARES_FUNCTION_P (NODE) || lt->u.base.selector != 1) \
2050 #define LANG_DECL_NS_CHECK(NODE) __extension__ \
2051 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2052 if (TREE_CODE (NODE) != NAMESPACE_DECL || lt->u.base.selector != 2) \
2056 #define LANG_DECL_PARM_CHECK(NODE) __extension__ \
2057 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2058 if (TREE_CODE (NODE) != PARM_DECL) \
2062 #define LANG_DECL_U2_CHECK(NODE, TF) __extension__ \
2063 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2064 if (!LANG_DECL_HAS_MIN (NODE) || lt->u.base.u2sel != TF) \
2070 #define LANG_DECL_MIN_CHECK(NODE) \
2071 (&DECL_LANG_SPECIFIC (NODE)->u.min)
2073 #define LANG_DECL_FN_CHECK(NODE) \
2074 (&DECL_LANG_SPECIFIC (STRIP_TEMPLATE (NODE))->u.fn)
2076 #define LANG_DECL_NS_CHECK(NODE) \
2077 (&DECL_LANG_SPECIFIC (NODE)->u.ns)
2079 #define LANG_DECL_PARM_CHECK(NODE) \
2080 (&DECL_LANG_SPECIFIC (NODE)->u.parm)
2082 #define LANG_DECL_U2_CHECK(NODE, TF) \
2083 (&DECL_LANG_SPECIFIC (NODE)->u.min.u2)
2096 #define DECL_LANGUAGE(NODE) \
2097 (DECL_LANG_SPECIFIC (NODE) \
2098 ? DECL_LANG_SPECIFIC (NODE)->u.base.language \
2099 : (TREE_CODE (NODE) == FUNCTION_DECL \
2102 /* Set the language linkage for NODE to LANGUAGE. */
2103 #define SET_DECL_LANGUAGE(NODE, LANGUAGE) \
2104 (DECL_LANG_SPECIFIC (NODE)->u.base.language = (LANGUAGE))
2107 #define DECL_CONSTRUCTOR_P(NODE) \
2108 (LANG_DECL_FN_CHECK (NODE)->constructor_attr)
2110 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a complete
2112 #define DECL_COMPLETE_CONSTRUCTOR_P(NODE) \
2113 (DECL_CONSTRUCTOR_P (NODE) \
2114 && DECL_NAME (NODE) == complete_ctor_identifier)
2116 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a base
2118 #define DECL_BASE_CONSTRUCTOR_P(NODE) \
2119 (DECL_CONSTRUCTOR_P (NODE) \
2120 && DECL_NAME (NODE) == base_ctor_identifier)
2122 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor, but not either the
2125 #define DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P(NODE) \
2126 (DECL_DECLARES_FUNCTION_P (NODE) && DECL_CONSTRUCTOR_P (NODE) \
2127 && !DECL_CLONED_FUNCTION_P (NODE))
2129 /* Nonzero if NODE (a FUNCTION_DECL) is a copy constructor. */
2130 #define DECL_COPY_CONSTRUCTOR_P(NODE) \
2131 (DECL_CONSTRUCTOR_P (NODE) && copy_fn_p (NODE) > 0)
2133 /* Nonzero if NODE (a FUNCTION_DECL) is a move constructor. */
2134 #define DECL_MOVE_CONSTRUCTOR_P(NODE) \
2135 (DECL_CONSTRUCTOR_P (NODE) && move_fn_p (NODE))
2137 /* Nonzero if NODE is a destructor. */
2138 #define DECL_DESTRUCTOR_P(NODE) \
2139 (LANG_DECL_FN_CHECK (NODE)->destructor_attr)
2141 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor, but not the
2144 #define DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P(NODE) \
2145 (DECL_DECLARES_FUNCTION_P (NODE) && DECL_DESTRUCTOR_P (NODE) \
2146 && !DECL_CLONED_FUNCTION_P (NODE))
2148 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
2150 #define DECL_COMPLETE_DESTRUCTOR_P(NODE) \
2151 (DECL_DESTRUCTOR_P (NODE) \
2152 && DECL_NAME (NODE) == complete_dtor_identifier)
2154 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a base
2156 #define DECL_BASE_DESTRUCTOR_P(NODE) \
2157 (DECL_DESTRUCTOR_P (NODE) \
2158 && DECL_NAME (NODE) == base_dtor_identifier)
2160 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
2162 #define DECL_DELETING_DESTRUCTOR_P(NODE) \
2163 (DECL_DESTRUCTOR_P (NODE) \
2164 && DECL_NAME (NODE) == deleting_dtor_identifier)
2166 /* Nonzero if NODE (a FUNCTION_DECL) is a cloned constructor or
2168 #define DECL_CLONED_FUNCTION_P(NODE) (!!decl_cloned_function_p (NODE, true))
2172 #define DECL_CLONED_FUNCTION(NODE) (*decl_cloned_function_p (NODE, false))
2189 /* Nonzero if NODE has DECL_DISCRIMINATOR and not DECL_ACCESS. */
2190 #define DECL_DISCRIMINATOR_P(NODE) \
2191 (TREE_CODE (NODE) == VAR_DECL \
2192 && DECL_FUNCTION_SCOPE_P (NODE))
2195 #define DECL_DISCRIMINATOR(NODE) (LANG_DECL_U2_CHECK (NODE, 1)->discriminator)
2198 #define DECL_DISCRIMINATOR_SET_P(NODE) \
2199 (DECL_LANG_SPECIFIC (NODENODE)->u.base.u2sel == 1)
2203 #define DECL_PARM_INDEX(NODE) \
2204 (LANG_DECL_PARM_CHECK (NODE)->index)
2210 #define DECL_PARM_LEVEL(NODE) \
2211 (LANG_DECL_PARM_CHECK (NODE)->level)
2213 /* Nonzero if the VTT parm has been added to NODE. */
2214 #define DECL_HAS_VTT_PARM_P(NODE) \
2215 (LANG_DECL_FN_CHECK (NODE)->has_vtt_parm_p)
2217 /* Nonzero if NODE is a FUNCTION_DECL for which a VTT parameter is
2219 #define DECL_NEEDS_VTT_PARM_P(NODE) \
2220 (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (NODE)) \
2221 && (DECL_BASE_CONSTRUCTOR_P (NODE) \
2222 || DECL_BASE_DESTRUCTOR_P (NODE)))
2224 /* Nonzero if NODE is a user-defined conversion operator. */
2225 #define DECL_CONV_FN_P(NODE) \
2226 (DECL_NAME (NODE) && IDENTIFIER_TYPENAME_P (DECL_NAME (NODE)))
2233 /* Nonzero if NODE, which is a TEMPLATE_DECL, is a template
2236 #define DECL_TEMPLATE_CONV_FN_P(NODE) \
2237 (DECL_LANG_SPECIFIC (TEMPLATE_DECL_CHECK (NODE))->u.base.template_conv_p)
2239 /* Nonzero if NODE, a static data member, was declared in its class as an
2241 #define VAR_HAD_UNKNOWN_BOUND(NODE) \
2242 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE)) \
2243 ? DECL_LANG_SPECIFIC (NODE)->u.base.template_conv_p \
2245 #define SET_VAR_HAD_UNKNOWN_BOUND(NODE) \
2246 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))->u.base.template_conv_p = true)
2248 /* Set the overloaded operator code for NODE to CODE. */
2249 #define SET_OVERLOADED_OPERATOR_CODE(NODE, CODE) \
2250 (LANG_DECL_FN_CHECK (NODE)->operator_code = (CODE))
2252 /* If NODE is an overloaded operator, then this returns the TREE_CODE
2255 whether or not NODE is an assignment operator. If NODE is not an
2258 to test whether or not NODE is an overloaded operator. */
2259 #define DECL_OVERLOADED_OPERATOR_P(NODE) \
2260 (IDENTIFIER_OPNAME_P (DECL_NAME (NODE)) \
2261 ? LANG_DECL_FN_CHECK (NODE)->operator_code : ERROR_MARK)
2263 /* Nonzero if NODE is an assignment operator (including += and such). */
2264 #define DECL_ASSIGNMENT_OPERATOR_P(NODE) \
2265 (LANG_DECL_FN_CHECK (NODE)->assignment_operator_p)
2270 #define DECL_HAS_IN_CHARGE_PARM_P(NODE) \
2271 (LANG_DECL_FN_CHECK (NODE)->has_in_charge_parm_p)
2274 #define DECL_IS_BUILTIN_CONSTANT_P(NODE) \
2275 (TREE_CODE (NODE) == FUNCTION_DECL \
2276 && DECL_BUILT_IN_CLASS (NODE) == BUILT_IN_NORMAL \
2277 && DECL_FUNCTION_CODE (NODE) == BUILT_IN_CONSTANT_P)
2280 in) as a member in a RECORD_TYPE or UNION_TYPE node. It is also for
2284 #define DECL_IN_AGGR_P(NODE) (DECL_LANG_FLAG_3 (NODE))
2290 #define DECL_INITIALIZED_P(NODE) \
2291 (TREE_LANG_FLAG_1 (VAR_DECL_CHECK (NODE)))
2295 #define DECL_NONTRIVIALLY_INITIALIZED_P(NODE) \
2296 (TREE_LANG_FLAG_3 (VAR_DECL_CHECK (NODE)))
2300 #define DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P(NODE) \
2301 (TREE_LANG_FLAG_2 (VAR_DECL_CHECK (NODE)))
2318 #define DECL_FRIEND_P(NODE) \
2319 (DECL_LANG_SPECIFIC (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK (NODE)) \
2323 #define DECL_BEFRIENDING_CLASSES(NODE) \
2324 (LANG_DECL_FN_CHECK (NODE)->befriending_classes)
2328 #define DECL_STATIC_FUNCTION_P(NODE) \
2329 (LANG_DECL_FN_CHECK (NODE)->static_function)
2333 #define DECL_NONSTATIC_MEMBER_FUNCTION_P(NODE) \
2334 (TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE)
2338 #define DECL_FUNCTION_MEMBER_P(NODE) \
2339 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) || DECL_STATIC_FUNCTION_P (NODE))
2343 #define DECL_CONST_MEMFUNC_P(NODE) \
2344 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
2346 (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
2350 #define DECL_VOLATILE_MEMFUNC_P(NODE) \
2351 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
2353 (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
2356 #define DECL_NONSTATIC_MEMBER_P(NODE) \
2357 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
2358 || TREE_CODE (NODE) == FIELD_DECL)
2362 #define DECL_MUTABLE_P(NODE) (DECL_LANG_FLAG_0 (NODE))
2366 #define DECL_NONCONVERTING_P(NODE) \
2367 (LANG_DECL_FN_CHECK (NODE)->nonconverting)
2371 #define DECL_PURE_VIRTUAL_P(NODE) \
2372 (LANG_DECL_FN_CHECK (NODE)->pure_virtual)
2374 /* True (in a FUNCTION_DECL) if NODE is a virtual function that is an
2378 #define DECL_INVALID_OVERRIDER_P(NODE) \
2379 (DECL_LANG_FLAG_4 (NODE))
2381 /* True (in a FUNCTION_DECL) if NODE is a function declared with
2383 #define DECL_OVERRIDE_P(NODE) (TREE_LANG_FLAG_0 (NODE))
2385 /* True (in a FUNCTION_DECL) if NODE is a function declared with
2387 #define DECL_FINAL_P(NODE) (TREE_LANG_FLAG_1 (NODE))
2389 /* The thunks associated with NODE, a FUNCTION_DECL. */
2390 #define DECL_THUNKS(NODE) \
2391 (DECL_VIRTUAL_P (NODE) ? LANG_DECL_FN_CHECK (NODE)->context : NULL_TREE)
2394 #define SET_DECL_THUNKS(NODE,THUNKS) \
2395 (LANG_DECL_FN_CHECK (NODE)->context = (THUNKS))
2397 /* If NODE, a FUNCTION_DECL, is a C++11 inheriting constructor, then this
2399 #define DECL_INHERITED_CTOR_BASE(NODE) \
2400 (DECL_CONSTRUCTOR_P (NODE) ? LANG_DECL_FN_CHECK (NODE)->context : NULL_TREE)
2403 #define SET_DECL_INHERITED_CTOR_BASE(NODE,INH) \
2404 (LANG_DECL_FN_CHECK (NODE)->context = (INH))
2406 /* Nonzero if NODE is a thunk, rather than an ordinary function. */
2407 #define DECL_THUNK_P(NODE) \
2408 (TREE_CODE (NODE) == FUNCTION_DECL \
2409 && DECL_LANG_SPECIFIC (NODE) \
2410 && LANG_DECL_FN_CHECK (NODE)->thunk_p)
2412 /* Set DECL_THUNK_P for node. */
2413 #define SET_DECL_THUNK_P(NODE, THIS_ADJUSTING) \
2414 (LANG_DECL_FN_CHECK (NODE)->thunk_p = 1, \
2415 LANG_DECL_FN_CHECK (NODE)->this_thunk_p = (THIS_ADJUSTING))
2417 /* Nonzero if NODE is a this pointer adjusting thunk. */
2418 #define DECL_THIS_THUNK_P(NODE) \
2419 (DECL_THUNK_P (NODE) && LANG_DECL_FN_CHECK (NODE)->this_thunk_p)
2421 /* Nonzero if NODE is a result pointer adjusting thunk. */
2422 #define DECL_RESULT_THUNK_P(NODE) \
2423 (DECL_THUNK_P (NODE) && !LANG_DECL_FN_CHECK (NODE)->this_thunk_p)
2425 /* Nonzero if NODE is a FUNCTION_DECL, but not a thunk. */
2426 #define DECL_NON_THUNK_FUNCTION_P(NODE) \
2427 (TREE_CODE (NODE) == FUNCTION_DECL && !DECL_THUNK_P (NODE))
2429 /* Nonzero if NODE is `extern "C"'. */
2430 #define DECL_EXTERN_C_P(NODE) \
2431 (DECL_LANGUAGE (NODE) == lang_c)
2433 /* Nonzero if NODE is an `extern "C"' function. */
2434 #define DECL_EXTERN_C_FUNCTION_P(NODE) \
2435 (DECL_NON_THUNK_FUNCTION_P (NODE) && DECL_EXTERN_C_P (NODE))
2439 #define DECL_REPO_AVAILABLE_P(NODE) \
2440 (DECL_LANG_SPECIFIC (NODE)->u.base.repo_available_p)
2448 #define DECL_PRETTY_FUNCTION_P(NODE) \
2449 (DECL_NAME (NODE) \
2450 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__PRETTY_FUNCTION__"))
2454 #define DECL_GNU_TLS_P(NODE) \
2455 (TREE_LANG_FLAG_0 (VAR_DECL_CHECK (NODE)))
2459 #define DECL_CLASS_CONTEXT(NODE) \
2460 (DECL_CLASS_SCOPE_P (NODE) ? DECL_CONTEXT (NODE) : NULL_TREE)
2468 #define DECL_FRIEND_CONTEXT(NODE) \
2469 ((DECL_DECLARES_FUNCTION_P (NODE) \
2470 && DECL_FRIEND_P (NODE) && !DECL_FUNCTION_MEMBER_P (NODE)) \
2471 ? LANG_DECL_FN_CHECK (NODE)->context \
2474 /* Set the DECL_FRIEND_CONTEXT for NODE to CONTEXT. */
2475 #define SET_DECL_FRIEND_CONTEXT(NODE, CONTEXT) \
2476 (LANG_DECL_FN_CHECK (NODE)->context = (CONTEXT))
2478 #define CP_DECL_CONTEXT(NODE) \
2479 (!DECL_FILE_SCOPE_P (NODE) ? DECL_CONTEXT (NODE) : global_namespace)
2480 #define CP_TYPE_CONTEXT(NODE) \
2481 (!TYPE_FILE_SCOPE_P (NODE) ? TYPE_CONTEXT (NODE) : global_namespace)
2482 #define FROB_CONTEXT(NODE) \
2483 ((NODE) == global_namespace ? DECL_CONTEXT (NODE) : (NODE))
2485 /* 1 iff NODE has namespace scope, including the global namespace. */
2486 #define DECL_NAMESPACE_SCOPE_P(NODE) \
2487 (!DECL_TEMPLATE_PARM_P (NODE) \
2488 && TREE_CODE (CP_DECL_CONTEXT (NODE)) == NAMESPACE_DECL)
2490 #define TYPE_NAMESPACE_SCOPE_P(NODE) \
2491 (TREE_CODE (CP_TYPE_CONTEXT (NODE)) == NAMESPACE_DECL)
2493 #define NAMESPACE_SCOPE_P(NODE) \
2494 ((DECL_P (NODE) && DECL_NAMESPACE_SCOPE_P (NODE)) \
2495 || (TYPE_P (NODE) && TYPE_NAMESPACE_SCOPE_P (NODE)))
2497 /* 1 iff NODE is a class member. */
2498 #define DECL_CLASS_SCOPE_P(NODE) \
2499 (DECL_CONTEXT (NODE) && TYPE_P (DECL_CONTEXT (NODE)))
2501 #define TYPE_CLASS_SCOPE_P(NODE) \
2502 (TYPE_CONTEXT (NODE) && TYPE_P (TYPE_CONTEXT (NODE)))
2504 /* 1 iff NODE is function-local. */
2505 #define DECL_FUNCTION_SCOPE_P(NODE) \
2506 (DECL_CONTEXT (NODE) \
2507 && TREE_CODE (DECL_CONTEXT (NODE)) == FUNCTION_DECL)
2509 #define TYPE_FUNCTION_SCOPE_P(NODE) \
2510 (TYPE_CONTEXT (NODE) && TREE_CODE (TYPE_CONTEXT (NODE)) == FUNCTION_DECL)
2512 /* 1 iff VAR_DECL node NODE is a type-info decl. This flag is set for
2514 #define DECL_TINFO_P(NODE) TREE_LANG_FLAG_4 (VAR_DECL_CHECK (NODE))
2516 /* 1 iff VAR_DECL node NODE is virtual table or VTT. */
2517 #define DECL_VTABLE_OR_VTT_P(NODE) TREE_LANG_FLAG_5 (VAR_DECL_CHECK (NODE))
2520 #define FUNCTION_REF_QUALIFIED(NODE) \
2521 TREE_LANG_FLAG_4 (FUNC_OR_METHOD_CHECK (NODE))
2524 #define FUNCTION_RVALUE_QUALIFIED(NODE) \
2525 TREE_LANG_FLAG_5 (FUNC_OR_METHOD_CHECK (NODE))
2530 #define DECL_CONSTRUCTION_VTABLE_P(NODE) \
2531 TREE_LANG_FLAG_6 (VAR_DECL_CHECK (NODE))
2533 /* 1 iff NODE is function-local, but for types. */
2534 #define LOCAL_CLASS_P(NODE) \
2535 (decl_function_context (TYPE_MAIN_DECL (NODE)) != NULL_TREE)
2540 #define DECL_NAMESPACE_USING(NODE) DECL_VINDEX (NAMESPACE_DECL_CHECK (NODE))
2544 #define DECL_NAMESPACE_USERS(NODE) DECL_INITIAL (NAMESPACE_DECL_CHECK (NODE))
2548 #define DECL_NAMESPACE_ASSOCIATIONS(NODE) \
2549 (NAMESPACE_DECL_CHECK (NODE)->decl_non_common.saved_tree)
2553 #define DECL_NAMESPACE_ALIAS(NODE) \
2554 DECL_ABSTRACT_ORIGIN (NAMESPACE_DECL_CHECK (NODE))
2555 #define ORIGINAL_NAMESPACE(NODE) \
2556 (DECL_NAMESPACE_ALIAS (NODE) ? DECL_NAMESPACE_ALIAS (NODE) : (NODE))
2558 /* Nonzero if NODE is the std namespace. */
2559 #define DECL_NAMESPACE_STD_P(NODE) \
2560 (TREE_CODE (NODE) == NAMESPACE_DECL \
2561 && CP_DECL_CONTEXT (NODE) == global_namespace \
2562 && DECL_NAME (NODE) == std_identifier)
2566 #define TREE_INDIRECT_USING(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
2570 #define ATTR_IS_DEPENDENT(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
2576 #define DECL_DEPENDENT_P(NODE) DECL_LANG_FLAG_0 (USING_DECL_CHECK (NODE))
2579 #define USING_DECL_SCOPE(NODE) TREE_TYPE (USING_DECL_CHECK (NODE))
2582 #define USING_DECL_DECLS(NODE) DECL_INITIAL (USING_DECL_CHECK (NODE))
2585 #define USING_DECL_TYPENAME_P(NODE) DECL_LANG_FLAG_1 (USING_DECL_CHECK (NODE))
2589 #define DECL_HAS_SHADOWED_FOR_VAR_P(NODE) \
2590 (VAR_DECL_CHECK (NODE)->decl_with_vis.shadowed_for_var_p)
2594 #define DECL_SHADOWED_FOR_VAR(NODE) \
2595 (DECL_HAS_SHADOWED_FOR_VAR_P(NODE) ? decl_shadowed_for_var_lookup (NODE) : NULL)
2597 #define SET_DECL_SHADOWED_FOR_VAR(NODE, VAL) \
2598 (decl_shadowed_for_var_insert (NODE, VAL))
2603 #define DECL_PENDING_INLINE_P(NODE) \
2604 (LANG_DECL_FN_CHECK (NODE)->pending_inline_p)
2608 #define DECL_PENDING_INLINE_INFO(NODE) \
2609 (LANG_DECL_FN_CHECK (NODE)->u.pending_inline_info)
2612 #define TYPE_DECL_ALIAS_P(NODE) \
2613 DECL_LANG_FLAG_6 (TYPE_DECL_CHECK (NODE))
2618 #define TYPE_ALIAS_P(NODE) \
2619 (TYPE_P (NODE) \
2620 && TYPE_NAME (NODE) \
2621 && TREE_CODE (TYPE_NAME (NODE)) == TYPE_DECL \
2622 && TYPE_DECL_ALIAS_P (TYPE_NAME (NODE)))
2626 #define CLASSTYPE_SORTED_FIELDS(NODE) \
2627 (LANG_TYPE_CLASS_CHECK (NODE)->sorted_fields)
2648 #define DECL_TEMPLATE_INFO(NODE) \
2649 (DECL_LANG_SPECIFIC (VAR_TEMPL_TYPE_FIELD_OR_FUNCTION_DECL_CHECK (NODE)) \
2655 #define DECL_ANON_UNION_VAR_P(NODE) \
2656 (DECL_LANG_FLAG_4 (VAR_DECL_CHECK (NODE)))
2659 #define CLASSTYPE_TEMPLATE_INFO(NODE) \
2660 (LANG_TYPE_CLASS_CHECK (RECORD_OR_UNION_CHECK (NODE))->template_info)
2666 #define ENUM_TEMPLATE_INFO(NODE) \
2667 (TYPE_LANG_SLOT_1 (ENUMERAL_TYPE_CHECK (NODE)))
2670 #define TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO(NODE) \
2671 (LANG_TYPE_CLASS_CHECK (BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK (NODE)) \
2675 BOUND_TEMPLATE_TEMPLATE_PARM type. Note that if NODE is a
2679 #define TYPE_TEMPLATE_INFO(NODE) \
2680 ((TYPE_ALIAS_P (NODE) && DECL_LANG_SPECIFIC (TYPE_NAME (NODE))) \
2681 ? (DECL_LANG_SPECIFIC (TYPE_NAME (NODE)) \
2682 ? DECL_TEMPLATE_INFO (TYPE_NAME (NODE)) \
2684 : ((TREE_CODE (NODE) == ENUMERAL_TYPE) \
2685 ? ENUM_TEMPLATE_INFO (NODE) \
2686 : ((TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM) \
2687 ? TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (NODE) \
2688 : (CLASS_TYPE_P (NODE) \
2689 ? CLASSTYPE_TEMPLATE_INFO (NODE) \
2695 #define SET_TYPE_TEMPLATE_INFO(NODE, VAL) \
2696 (TREE_CODE (NODE) == ENUMERAL_TYPE \
2697 ? (ENUM_TEMPLATE_INFO (NODE) = (VAL)) \
2698 : ((CLASS_TYPE_P (NODE) && !TYPE_ALIAS_P (NODE)) \
2699 ? (CLASSTYPE_TEMPLATE_INFO (NODE) = (VAL)) \
2700 : (DECL_TEMPLATE_INFO (TYPE_NAME (NODE)) = (VAL))))
2702 #define TI_TEMPLATE(NODE) TREE_TYPE (TEMPLATE_INFO_CHECK (NODE))
2703 #define TI_ARGS(NODE) TREE_CHAIN (TEMPLATE_INFO_CHECK (NODE))
2704 #define TI_PENDING_TEMPLATE_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
2708 #define NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) TREE_CHAIN (TREE_VEC_CHECK (NODE))
2711 #define SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE, INT_VALUE) \
2712 NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) = build_int_cst (NULL_TREE, INT_VALUE)
2714 #define GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) \
2715 int_cst_value (NON_DEFAULT_TEMPLATE_ARGS_COUNT (NODE))
2717 #define GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) \
2718 NON_DEFAULT_TEMPLATE_ARGS_COUNT (NODE) \
2719 ? int_cst_value (NON_DEFAULT_TEMPLATE_ARGS_COUNT (NODE)) \
2720 : TREE_VEC_LENGTH (INNERMOST_TEMPLATE_ARGS (NODE))
2724 #define TI_TYPEDEFS_NEEDING_ACCESS_CHECKING(NODE) \
2726 (NODE))->typedefs_needing_access_checking
2748 #define TMPL_ARGS_HAVE_MULTIPLE_LEVELS(NODE) \
2749 (NODE && TREE_VEC_LENGTH (NODE) && TREE_VEC_ELT (NODE, 0) \
2750 && TREE_CODE (TREE_VEC_ELT (NODE, 0)) == TREE_VEC)
2757 #define TMPL_ARGS_DEPTH(NODE) \
2758 (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (NODE) ? TREE_VEC_LENGTH (NODE) : 1)
2775 /* Given a single level of template arguments in NODE, return the
2777 #define NUM_TMPL_ARGS(NODE) \
2778 (TREE_VEC_LENGTH (NODE))
2781 #define INNERMOST_TEMPLATE_ARGS(NODE) \
2782 (get_innermost_template_args ((NODE), 1))
2784 /* The number of levels of template parameters given by NODE. */
2785 #define TMPL_PARMS_DEPTH(NODE) \
2786 ((HOST_WIDE_INT) TREE_INT_CST_LOW (TREE_PURPOSE (NODE)))
2788 /* The TEMPLATE_DECL instantiated or specialized by NODE. This
2809 #define DECL_TI_TEMPLATE(NODE) TI_TEMPLATE (DECL_TEMPLATE_INFO (NODE))
2816 #define DECL_TI_ARGS(NODE) TI_ARGS (DECL_TEMPLATE_INFO (NODE))
2818 /* The TEMPLATE_DECL associated with NODE, a class type. Even if NODE
2827 #define CLASSTYPE_TI_TEMPLATE(NODE) TI_TEMPLATE (CLASSTYPE_TEMPLATE_INFO (NODE))
2828 #define CLASSTYPE_TI_ARGS(NODE) TI_ARGS (CLASSTYPE_TEMPLATE_INFO (NODE))
2840 #define TYPE_TI_TEMPLATE(NODE) \
2841 (TI_TEMPLATE (TYPE_TEMPLATE_INFO (NODE)))
2844 #define TYPE_TI_ARGS(NODE) \
2845 (TI_ARGS (TYPE_TEMPLATE_INFO (NODE)))
2847 #define INNERMOST_TEMPLATE_PARMS(NODE) TREE_VALUE (NODE)
2849 /* Nonzero if NODE (a TEMPLATE_DECL) is a member template, in the
2851 #define DECL_MEMBER_TEMPLATE_P(NODE) \
2852 (DECL_LANG_FLAG_1 (TEMPLATE_DECL_CHECK (NODE)))
2854 /* Nonzero if the NODE corresponds to the template parameters for a
2857 #define TEMPLATE_PARMS_FOR_INLINE(NODE) TREE_LANG_FLAG_1 (NODE)
2861 #define FUNCTION_PARAMETER_PACK_P(NODE) \
2862 (DECL_LANG_FLAG_1 (PARM_DECL_CHECK (NODE)))
2864 /* Determines if NODE is an expansion of one or more parameter packs,
2866 #define PACK_EXPANSION_P(NODE) \
2867 (TREE_CODE (NODE) == TYPE_PACK_EXPANSION \
2868 || TREE_CODE (NODE) == EXPR_PACK_EXPANSION)
2872 #define PACK_EXPANSION_PATTERN(NODE) \
2873 (TREE_CODE (NODE) == TYPE_PACK_EXPANSION? TREE_TYPE (NODE) \
2874 : TREE_OPERAND (NODE, 0))
2878 #define SET_PACK_EXPANSION_PATTERN(NODE,VALUE) \
2879 if (TREE_CODE (NODE) == TYPE_PACK_EXPANSION) \
2880 TREE_TYPE (NODE) = VALUE; \
2882 TREE_OPERAND (NODE, 0) = VALUE
2884 /* The list of parameter packs used in the PACK_EXPANSION_* node. The
2886 #define PACK_EXPANSION_PARAMETER_PACKS(NODE) \
2887 *(TREE_CODE (NODE) == EXPR_PACK_EXPANSION \
2888 ? &TREE_OPERAND (NODE, 1) \
2889 : &TYPE_MINVAL (TYPE_PACK_EXPANSION_CHECK (NODE)))
2893 #define PACK_EXPANSION_EXTRA_ARGS(NODE) \
2894 *(TREE_CODE (NODE) == TYPE_PACK_EXPANSION \
2895 ? &TYPE_MAXVAL (NODE) \
2896 : &TREE_OPERAND ((NODE), 2))
2899 #define PACK_EXPANSION_LOCAL_P(NODE) TREE_LANG_FLAG_0 (NODE)
2902 #define ARGUMENT_PACK_P(NODE) \
2903 (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK \
2904 || TREE_CODE (NODE) == NONTYPE_ARGUMENT_PACK)
2908 #define ARGUMENT_PACK_ARGS(NODE) \
2909 (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK? TREE_TYPE (NODE) \
2910 : TREE_OPERAND (NODE, 0))
2914 #define SET_ARGUMENT_PACK_ARGS(NODE,VALUE) \
2915 if (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK) \
2916 TREE_TYPE (NODE) = VALUE; \
2918 TREE_OPERAND (NODE, 0) = VALUE
2926 #define ARGUMENT_PACK_INCOMPLETE_P(NODE) \
2927 TREE_ADDRESSABLE (ARGUMENT_PACK_ARGS (NODE))
2931 #define ARGUMENT_PACK_EXPLICIT_ARGS(NODE) \
2932 TREE_TYPE (ARGUMENT_PACK_ARGS (NODE))
2936 #define ARGUMENT_PACK_SELECT_FROM_PACK(NODE) \
2937 (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->argument_pack)
2941 #define ARGUMENT_PACK_SELECT_INDEX(NODE) \
2942 (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->index)
2946 #define ARGUMENT_PACK_SELECT_ARG(NODE) \
2947 TREE_VEC_ELT (ARGUMENT_PACK_ARGS (ARGUMENT_PACK_SELECT_FROM_PACK (NODE)), \
2948 ARGUMENT_PACK_SELECT_INDEX (NODE));
2951 #define DECL_SAVED_FUNCTION_DATA(NODE) \
2952 (LANG_DECL_FN_CHECK (FUNCTION_DECL_CHECK (NODE)) \
2955 /* True if NODE is an implicit INDIRECT_EXPR from convert_from_reference. */
2956 #define REFERENCE_REF_P(NODE) \
2957 (TREE_CODE (NODE) == INDIRECT_REF \
2958 && TREE_TYPE (TREE_OPERAND (NODE, 0)) \
2959 && (TREE_CODE (TREE_TYPE (TREE_OPERAND ((NODE), 0))) \
2962 #define NEW_EXPR_USE_GLOBAL(NODE) \
2963 TREE_LANG_FLAG_0 (NEW_EXPR_CHECK (NODE))
2964 #define DELETE_EXPR_USE_GLOBAL(NODE) \
2965 TREE_LANG_FLAG_0 (DELETE_EXPR_CHECK (NODE))
2966 #define DELETE_EXPR_USE_VEC(NODE) \
2967 TREE_LANG_FLAG_1 (DELETE_EXPR_CHECK (NODE))
2971 #define COMPOUND_EXPR_OVERLOADED(NODE) \
2972 TREE_LANG_FLAG_0 (COMPOUND_EXPR_CHECK (NODE))
2976 #define KOENIG_LOOKUP_P(NODE) TREE_LANG_FLAG_0 (CALL_EXPR_CHECK (NODE))
2981 #define PAREN_STRING_LITERAL_P(NODE) \
2982 TREE_LANG_FLAG_0 (STRING_CST_CHECK (NODE))
2986 #define AGGR_INIT_VIA_CTOR_P(NODE) \
2987 TREE_LANG_FLAG_0 (AGGR_INIT_EXPR_CHECK (NODE))
2991 #define AGGR_INIT_ZERO_FIRST(NODE) \
2992 TREE_LANG_FLAG_2 (AGGR_INIT_EXPR_CHECK (NODE))
2998 #define AGGR_INIT_EXPR_FN(NODE) TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 1)
2999 #define AGGR_INIT_EXPR_SLOT(NODE) \
3000 TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 2)
3001 #define AGGR_INIT_EXPR_ARG(NODE, I) \
3002 TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), (I) + 3)
3003 #define aggr_init_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3)
3005 /* AGGR_INIT_EXPR_ARGP returns a pointer to the argument vector for NODE.
3006 We can't use &AGGR_INIT_EXPR_ARG (NODE, 0) because that will complain if
3011 #define AGGR_INIT_EXPR_ARGP(NODE) \
3012 (&(TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 0)) + 3)
3024 arguments from AGGR_INIT_EXPR node EXP. */
3073 #define VEC_INIT_EXPR_SLOT(NODE) TREE_OPERAND (VEC_INIT_EXPR_CHECK (NODE), 0)
3074 #define VEC_INIT_EXPR_INIT(NODE) TREE_OPERAND (VEC_INIT_EXPR_CHECK (NODE), 1)
3078 #define VEC_INIT_EXPR_IS_CONSTEXPR(NODE) \
3079 TREE_LANG_FLAG_0 (VEC_INIT_EXPR_CHECK (NODE))
3082 #define VEC_INIT_EXPR_VALUE_INIT(NODE) \
3083 TREE_LANG_FLAG_1 (VEC_INIT_EXPR_CHECK (NODE))
3087 #define MUST_NOT_THROW_COND(NODE) \
3088 TREE_OPERAND (MUST_NOT_THROW_EXPR_CHECK (NODE), 1)
3094 #define CLASSTYPE_IS_TEMPLATE(NODE) \
3095 (CLASSTYPE_TEMPLATE_INFO (NODE) \
3096 && !CLASSTYPE_USE_TEMPLATE (NODE) \
3097 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE)))
3103 #define TYPENAME_TYPE_FULLNAME(NODE) \
3104 (TYPE_VALUES_RAW (TYPENAME_TYPE_CHECK (NODE)))
3107 #define TYPENAME_IS_ENUM_P(NODE) \
3108 (TREE_LANG_FLAG_0 (TYPENAME_TYPE_CHECK (NODE)))
3112 #define TYPENAME_IS_CLASS_P(NODE) \
3113 (TREE_LANG_FLAG_1 (TYPENAME_TYPE_CHECK (NODE)))
3116 #define TYPENAME_IS_RESOLVING_P(NODE) \
3117 (TREE_LANG_FLAG_2 (TYPENAME_TYPE_CHECK (NODE)))
3123 #define TYPE_POLYMORPHIC_P(NODE) (TREE_LANG_FLAG_2 (NODE))
3126 #define TYPE_CONTAINS_VPTR_P(NODE) \
3127 (TYPE_POLYMORPHIC_P (NODE) || CLASSTYPE_VBASECLASSES (NODE))
3131 #define DECL_DEAD_FOR_LOCAL(NODE) DECL_LANG_FLAG_7 (VAR_DECL_CHECK (NODE))
3135 #define DECL_ERROR_REPORTED(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
3137 /* Nonzero if NODE is a FUNCTION_DECL (for a function with global
3139 #define DECL_LOCAL_FUNCTION_P(NODE) \
3140 DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
3142 /* True if NODE was declared with auto in its return type, but it has
3145 DECL_STRUCT_FUNCTION(NODE)->language->x_auto_return_pattern. */
3146 #define FNDECL_USED_AUTO(NODE) \
3147 TREE_LANG_FLAG_2 (FUNCTION_DECL_CHECK (NODE))
3149 /* Nonzero if NODE is a DECL which we know about but which has not
3153 #define DECL_ANTICIPATED(NODE) \
3154 (DECL_LANG_SPECIFIC (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK (NODE)) \
3157 /* Nonzero if NODE is a FUNCTION_DECL which was declared as a friend
3160 #define DECL_HIDDEN_FRIEND_P(NODE) \
3161 (LANG_DECL_FN_CHECK (DECL_COMMON_CHECK (NODE))->hidden_friend_p)
3298 #define ENUM_FIXED_UNDERLYING_TYPE_P(NODE) (TYPE_LANG_FLAG_5 (NODE))
3336 #define TYPE_HAS_USER_CONSTRUCTOR(NODE) (TYPE_LANG_FLAG_1 (NODE))
3352 #define TREE_HAS_CONSTRUCTOR(NODE) (TREE_LANG_FLAG_4 (NODE))
3354 /* True if NODE is a brace-enclosed initializer. */
3355 #define BRACE_ENCLOSED_INITIALIZER_P(NODE) \
3356 (TREE_CODE (NODE) == CONSTRUCTOR && TREE_TYPE (NODE) == init_list_type_node)
3358 /* True if NODE is a compound-literal, i.e., a brace-enclosed
3360 #define COMPOUND_LITERAL_P(NODE) \
3361 (TREE_CODE (NODE) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (NODE))
3363 #define EMPTY_CONSTRUCTOR_P(NODE) (TREE_CODE (NODE) == CONSTRUCTOR \
3364 && vec_safe_is_empty(CONSTRUCTOR_ELTS(NODE))\
3365 && !TREE_HAS_CONSTRUCTOR (NODE))
3367 /* True if NODE is a init-list used as a direct-initializer, i.e.
3369 #define CONSTRUCTOR_IS_DIRECT_INIT(NODE) (TREE_LANG_FLAG_0 (CONSTRUCTOR_CHECK (NODE)))
3371 /* True if NODE represents a conversion for direct-initialization in a
3373 #define IMPLICIT_CONV_EXPR_DIRECT_INIT(NODE) \
3374 (TREE_LANG_FLAG_0 (IMPLICIT_CONV_EXPR_CHECK (NODE)))
3378 #define CLASSTYPE_NON_AGGREGATE(NODE) \
3379 (LANG_TYPE_CLASS_CHECK (NODE)->non_aggregate)
3380 #define TYPE_NON_AGGREGATE_CLASS(NODE) \
3381 (CLASS_TYPE_P (NODE) && CLASSTYPE_NON_AGGREGATE (NODE))
3384 #define TYPE_HAS_COMPLEX_COPY_ASSIGN(NODENODE)->has_complex_copy_assign)
3387 #define TYPE_HAS_COMPLEX_COPY_CTOR(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_copy_ctor)
3390 #define TYPE_HAS_COMPLEX_MOVE_ASSIGN(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_move_assign)
3393 #define TYPE_HAS_COMPLEX_MOVE_CTOR(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_move_ctor)
3396 #define TYPE_HAS_COMPLEX_DFLT(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_dflt)
3409 #define TYPE_HAS_TRIVIAL_DESTRUCTOR(NODE) \
3410 (!TYPE_HAS_NONTRIVIAL_DESTRUCTOR (NODE))
3412 /* Nonzero for _TYPE node means that this type does not have a trivial
3416 #define TYPE_HAS_NONTRIVIAL_DESTRUCTOR(NODE) \
3417 (TYPE_LANG_FLAG_4 (NODE))
3420 #define TYPE_HAS_TRIVIAL_DFLT(NODE) \
3421 (TYPE_HAS_DEFAULT_CONSTRUCTOR (NODE) && ! TYPE_HAS_COMPLEX_DFLT (NODE))
3425 #define TYPE_HAS_TRIVIAL_COPY_CTOR(NODE) \
3426 (TYPE_HAS_COPY_CTOR (NODE) && ! TYPE_HAS_COMPLEX_COPY_CTOR (NODE))
3430 #define TYPE_HAS_TRIVIAL_COPY_ASSIGN(NODE) \
3431 (TYPE_HAS_COPY_ASSIGN (NODE) && ! TYPE_HAS_COMPLEX_COPY_ASSIGN (NODE))
3433 /* Returns true if NODE is a pointer-to-data-member. */
3434 #define TYPE_PTRDATAMEM_P(NODE) \
3435 (TREE_CODE (NODE) == OFFSET_TYPE)
3436 /* Returns true if NODE is a pointer. */
3437 #define TYPE_PTR_P(NODE) \
3438 (TREE_CODE (NODE) == POINTER_TYPE)
3440 /* Returns true if NODE is an object type:
3448 #define TYPE_OBJ_P(NODE) \
3449 (TREE_CODE (NODE) != REFERENCE_TYPE \
3450 && TREE_CODE (NODE) != VOID_TYPE \
3451 && TREE_CODE (NODE) != FUNCTION_TYPE \
3452 && TREE_CODE (NODE) != METHOD_TYPE)
3454 /* Returns true if NODE is a pointer to an object. Keep these checks
3456 #define TYPE_PTROB_P(NODE) \
3457 (TYPE_PTR_P (NODE) && TYPE_OBJ_P (TREE_TYPE (NODE)))
3459 /* Returns true if NODE is a reference to an object. Keep these checks
3461 #define TYPE_REF_OBJ_P(NODE) \
3462 (TREE_CODE (NODE) == REFERENCE_TYPE && TYPE_OBJ_P (TREE_TYPE (NODE)))
3464 /* Returns true if NODE is a pointer to an object, or a pointer to
3466 #define TYPE_PTROBV_P(NODE) \
3467 (TYPE_PTR_P (NODE) \
3468 && !(TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE \
3469 || TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE))
3471 /* Returns true if NODE is a pointer to function. */
3472 #define TYPE_PTRFN_P(NODE) \
3473 (TREE_CODE (NODE) == POINTER_TYPE \
3474 && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE)
3476 /* Returns true if NODE is a reference to function. */
3477 #define TYPE_REFFN_P(NODE) \
3478 (TREE_CODE (NODE) == REFERENCE_TYPE \
3479 && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE)
3481 /* Nonzero for _TYPE node means that this type is a pointer to member
3483 #define TYPE_PTRMEMFUNC_P(NODE) \
3484 (TREE_CODE (NODE) == RECORD_TYPE \
3485 && TYPE_LANG_SPECIFIC (NODE) \
3486 && TYPE_PTRMEMFUNC_FLAG (NODE))
3488 #define TYPE_PTRMEMFUNC_FLAG(NODE) \
3489 (LANG_TYPE_CLASS_CHECK (NODE)->ptrmemfunc_flag)
3491 /* Returns true if NODE is a pointer-to-member. */
3492 #define TYPE_PTRMEM_P(NODE) \
3493 (TYPE_PTRDATAMEM_P (NODE) || TYPE_PTRMEMFUNC_P (NODE))
3495 /* Returns true if NODE is a pointer or a pointer-to-member. */
3496 #define TYPE_PTR_OR_PTRMEM_P(NODE) \
3497 (TYPE_PTR_P (NODE) || TYPE_PTRMEM_P (NODE))
3501 #define PTRMEM_OK_P(NODE) \
3502 TREE_LANG_FLAG_0 (TREE_CHECK3 ((NODE), ADDR_EXPR, OFFSET_REF, SCOPE_REF))
3507 #define TYPE_PTRMEMFUNC_FN_TYPE(NODE) \
3508 (TREE_TYPE (TYPE_FIELDS (NODE)))
3511 #define TYPE_PTRMEMFUNC_OBJECT_TYPE(NODE) \
3512 TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (NODE)))
3516 #define TYPE_GET_PTRMEMFUNC_TYPE(NODE) \
3517 (TYPE_LANG_SPECIFIC (NODE) ? LANG_TYPE_PTRMEM_CHECK (NODE)->record : NULL)
3518 #define TYPE_SET_PTRMEMFUNC_TYPE(NODE, VALUE) \
3520 if (TYPE_LANG_SPECIFIC (NODE) == NULL) \
3522 TYPE_LANG_SPECIFIC (NODE) = ggc_alloc_cleared_lang_type \
3524 TYPE_LANG_SPECIFIC (NODE)->u.ptrmem.h.is_lang_type_class = 0; \
3526 TYPE_LANG_SPECIFIC (NODE)->u.ptrmem.record = (VALUE); \
3534 #define TYPE_PTRMEM_CLASS_TYPE(NODE) \
3535 (TYPE_PTRDATAMEM_P (NODE) \
3536 ? TYPE_OFFSET_BASETYPE (NODE) \
3537 : TYPE_PTRMEMFUNC_OBJECT_TYPE (NODE))
3540 #define TYPE_PTRMEM_POINTED_TO_TYPE(NODE) \
3541 (TYPE_PTRDATAMEM_P (NODE) \
3542 ? TREE_TYPE (NODE) \
3543 : TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (NODE)))
3547 #define PTRMEM_CST_CLASS(NODE) \
3548 TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (PTRMEM_CST_CHECK (NODE)))
3552 #define PTRMEM_CST_MEMBER(NODE) (((ptrmem_cst_t)PTRMEM_CST_CHECK (NODE))->member)
3555 #define TYPEOF_TYPE_EXPR(NODE) (TYPE_VALUES_RAW (TYPEOF_TYPE_CHECK (NODE)))
3558 #define UNDERLYING_TYPE_TYPE(NODE) \
3559 (TYPE_VALUES_RAW (UNDERLYING_TYPE_CHECK (NODE)))
3562 #define BASES_TYPE(NODE) \
3563 (TYPE_VALUES_RAW (BASES_CHECK (NODE)))
3565 #define BASES_DIRECT(NODE) \
3566 TREE_LANG_FLAG_0 (BASES_CHECK (NODE))
3569 #define DECLTYPE_TYPE_EXPR(NODE) (TYPE_VALUES_RAW (DECLTYPE_TYPE_CHECK (NODE)))
3571 /* Whether the DECLTYPE_TYPE_EXPR of NODE was originally parsed as an
3574 #define DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P(NODE) \
3575 (DECLTYPE_TYPE_CHECK (NODE))->type_common.string_flag
3580 #define DECLTYPE_FOR_LAMBDA_CAPTURE(NODE) \
3581 TREE_LANG_FLAG_0 (DECLTYPE_TYPE_CHECK (NODE))
3582 #define DECLTYPE_FOR_LAMBDA_PROXY(NODE) \
3583 TREE_LANG_FLAG_2 (DECLTYPE_TYPE_CHECK (NODE))
3585 /* Nonzero for VAR_DECL and FUNCTION_DECL node means that `extern' was
3588 #define DECL_THIS_EXTERN(NODE) \
3589 DECL_LANG_FLAG_2 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
3591 /* Nonzero for VAR_DECL and FUNCTION_DECL node means that `static' was
3594 #define DECL_THIS_STATIC(NODE) \
3595 DECL_LANG_FLAG_6 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
3597 /* Nonzero for FIELD_DECL node means that this field is a base class
3599 #define DECL_FIELD_IS_BASE(NODE) \
3600 DECL_LANG_FLAG_6 (FIELD_DECL_CHECK (NODE))
3602 /* Nonzero for FIELD_DECL node means that this field is a simple (no
3605 #define DECL_NORMAL_CAPTURE_P(NODE) \
3606 DECL_LANG_FLAG_7 (FIELD_DECL_CHECK (NODE))
3611 #define ANON_AGGR_TYPE_P(NODE) \
3612 (CLASS_TYPE_P (NODE) && LANG_TYPE_CLASS_CHECK (NODE)->anon_aggr)
3613 #define SET_ANON_AGGR_TYPE_P(NODE) \
3614 (LANG_TYPE_CLASS_CHECK (NODE)->anon_aggr = 1)
3617 #define ANON_UNION_TYPE_P(NODE) \
3618 (TREE_CODE (NODE) == UNION_TYPE && ANON_AGGR_TYPE_P (NODE))
3622 #define TYPE_WAS_ANONYMOUS(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->was_anonymous)
3626 /* The format of each node in the DECL_FRIENDLIST is as follows:
3631 #define DECL_FRIENDLIST(NODE) (DECL_INITIAL (NODE))
3636 each node is a type; the TREE_VALUE is the access granted for this
3640 protected_access_node will appear in the DECL_ACCESS for the node. */
3641 #define DECL_ACCESS(NODE) (LANG_DECL_U2_CHECK (NODE, 0)->access)
3644 #define DECL_GLOBAL_CTOR_P(NODE) \
3645 (LANG_DECL_FN_CHECK (NODE)->global_ctor_p)
3648 #define DECL_GLOBAL_DTOR_P(NODE) \
3649 (LANG_DECL_FN_CHECK (NODE)->global_dtor_p)
3653 /* The DECL_TEMPLATE_PARMS are a list. The TREE_PURPOSE of each node
3664 #define DECL_TEMPLATE_PARMS(NODE) DECL_NON_COMMON_CHECK (NODE)->decl_non_common.arguments
3665 #define DECL_INNERMOST_TEMPLATE_PARMS(NODE) \
3666 INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (NODE))
3667 #define DECL_NTPARMS(NODE) \
3668 TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (NODE))
3670 #define DECL_TEMPLATE_RESULT(NODE) DECL_RESULT_FLD (NODE)
3684 In both cases, the TREE_PURPOSE of each node contains the arguments
3699 #define DECL_TEMPLATE_INSTANTIATIONS(NODE) DECL_VINDEX (NODE)
3707 example above.) The TREE_TYPE is the _TYPE node for the partial
3711 #define DECL_TEMPLATE_SPECIALIZATIONS(NODE) DECL_SIZE (NODE)
3715 #define DECL_TEMPLATE_PARM_P(NODE) \
3716 (DECL_LANG_FLAG_0 (NODE) \
3717 && (TREE_CODE (NODE) == CONST_DECL \
3718 || TREE_CODE (NODE) == PARM_DECL \
3719 || TREE_CODE (NODE) == TYPE_DECL \
3720 || TREE_CODE (NODE) == TEMPLATE_DECL))
3722 /* Mark NODE as a template parameter. */
3723 #define SET_DECL_TEMPLATE_PARM_P(NODE) \
3724 (DECL_LANG_FLAG_0 (NODE) = 1)
3726 /* Nonzero if NODE is a template template parameter. */
3727 #define DECL_TEMPLATE_TEMPLATE_PARM_P(NODE) \
3728 (TREE_CODE (NODE) == TEMPLATE_DECL && DECL_TEMPLATE_PARM_P (NODE))
3730 /* Nonzero if NODE is a TEMPLATE_DECL representing an
3731 UNBOUND_CLASS_TEMPLATE tree node. */
3732 #define DECL_UNBOUND_CLASS_TEMPLATE_P(NODE) \
3733 (TREE_CODE (NODE) == TEMPLATE_DECL && !DECL_TEMPLATE_RESULT (NODE))
3735 #define DECL_FUNCTION_TEMPLATE_P(NODE) \
3736 (TREE_CODE (NODE) == TEMPLATE_DECL \
3737 && !DECL_UNBOUND_CLASS_TEMPLATE_P (NODE) \
3738 && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == FUNCTION_DECL)
3742 #define DECL_TYPE_TEMPLATE_P(NODE) \
3743 (TREE_CODE (NODE) == TEMPLATE_DECL \
3744 && DECL_TEMPLATE_RESULT (NODE) != NULL_TREE \
3745 && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == TYPE_DECL)
3748 #define DECL_CLASS_TEMPLATE_P(NODE) \
3749 (DECL_TYPE_TEMPLATE_P (NODE) \
3750 && DECL_IMPLICIT_TYPEDEF_P (DECL_TEMPLATE_RESULT (NODE)))
3753 #define DECL_ALIAS_TEMPLATE_P(NODE) \
3754 (DECL_TYPE_TEMPLATE_P (NODE) \
3755 && !DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (NODE)))
3757 /* Nonzero for a NODE which declares a type. */
3758 #define DECL_DECLARES_TYPE_P(NODE) \
3759 (TREE_CODE (NODE) == TYPE_DECL || DECL_TYPE_TEMPLATE_P (NODE))
3761 /* Nonzero if NODE declares a function. */
3762 #define DECL_DECLARES_FUNCTION_P(NODE) \
3763 (TREE_CODE (NODE) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (NODE))
3765 /* Nonzero if NODE is the typedef implicitly generated for a type when
3772 #define DECL_IMPLICIT_TYPEDEF_P(NODE) \
3773 (TREE_CODE (NODE) == TYPE_DECL && DECL_LANG_FLAG_2 (NODE))
3774 #define SET_DECL_IMPLICIT_TYPEDEF_P(NODE) \
3775 (DECL_LANG_FLAG_2 (NODE) = 1)
3776 #define DECL_SELF_REFERENCE_P(NODE) \
3777 (TREE_CODE (NODE) == TYPE_DECL && DECL_LANG_FLAG_4 (NODE))
3778 #define SET_DECL_SELF_REFERENCE_P(NODE) \
3779 (DECL_LANG_FLAG_4 (NODE) = 1)
3786 #define DECL_PRIMARY_TEMPLATE(NODE) \
3787 (TREE_TYPE (DECL_INNERMOST_TEMPLATE_PARMS (NODE)))
3789 /* Returns nonzero if NODE is a primary template. */
3790 #define PRIMARY_TEMPLATE_P(NODE) (DECL_PRIMARY_TEMPLATE (NODE) == (NODE))
3792 /* Nonzero iff NODE is a specialization of a template. The value
3805 Note that NODE will be marked as a specialization even if the
3818 #define DECL_USE_TEMPLATE(NODE) (DECL_LANG_SPECIFIC (NODE)->u.base.use_template)
3821 #define CLASSTYPE_USE_TEMPLATE(NODE) \
3822 (LANG_TYPE_CLASS_CHECK (NODE)->use_template)
3824 /* True if NODE is a specialization of a primary template. */
3825 #define CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P(NODE) \
3826 (CLASS_TYPE_P (NODE) \
3827 && CLASSTYPE_USE_TEMPLATE (NODE) \
3828 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE)))
3830 #define DECL_TEMPLATE_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) & 1)
3831 #define CLASSTYPE_TEMPLATE_INSTANTIATION(NODE) \
3832 (CLASSTYPE_USE_TEMPLATE (NODE) & 1)
3834 #define DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) == 2)
3835 #define SET_DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) = 2)
3839 #define CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
3840 (CLASSTYPE_USE_TEMPLATE (NODE) == 2)
3841 #define SET_CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
3842 (CLASSTYPE_USE_TEMPLATE (NODE) = 2)
3844 #define DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 1)
3845 #define SET_DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 1)
3846 #define CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
3847 (CLASSTYPE_USE_TEMPLATE (NODE) == 1)
3848 #define SET_CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
3849 (CLASSTYPE_USE_TEMPLATE (NODE) = 1)
3851 #define DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 3)
3852 #define SET_DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 3)
3853 #define CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
3854 (CLASSTYPE_USE_TEMPLATE (NODE) == 3)
3855 #define SET_CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
3856 (CLASSTYPE_USE_TEMPLATE (NODE) = 3)
3888 #define DECL_TEMPLATE_INSTANTIATED(NODE) \
3889 DECL_LANG_FLAG_1 (VAR_OR_FUNCTION_DECL_CHECK (NODE))
3892 #define DECL_INTERFACE_KNOWN(NODE) DECL_LANG_FLAG_5 (NODE)
3901 #define DECL_NOT_REALLY_EXTERN(NODE) \
3902 (DECL_LANG_SPECIFIC (NODE)->u.base.not_really_extern)
3904 #define DECL_REALLY_EXTERN(NODE) \
3905 (DECL_EXTERNAL (NODE) && ! DECL_NOT_REALLY_EXTERN (NODE))
3968 /* For thunk NODE, this is the FUNCTION_DECL thunked to. It is
3970 #define THUNK_TARGET(NODE) \
3971 (LANG_DECL_FN_CHECK (NODE)->befriending_classes)
3975 #define QUALIFIED_NAME_IS_TEMPLATE(NODE) \
3976 (TREE_LANG_FLAG_1 (SCOPE_REF_CHECK (NODE)))
3980 #define OMP_ATOMIC_DEPENDENT_P(NODE) \
3981 (TREE_CODE (TREE_OPERAND (OMP_ATOMIC_CHECK (NODE), 0)) == INTEGER_CST)
3984 #define OMP_FOR_GIMPLIFYING_P(NODE) \
3985 (TREE_LANG_FLAG_0 (OMP_FOR_CHECK (NODE)))
3990 #define CP_OMP_CLAUSE_INFO(NODE) \
3991 TREE_TYPE (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_PRIVATE, \
3995 #define TRANSACTION_EXPR_IS_STMT(NODE) \
3996 TREE_LANG_FLAG_0 (TRANSACTION_EXPR_CHECK (NODE))
4000 #define TRY_STMTS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 0)
4001 #define TRY_HANDLERS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 1)
4003 #define EH_SPEC_STMTS(NODE) TREE_OPERAND (EH_SPEC_BLOCK_CHECK (NODE), 0)
4004 #define EH_SPEC_RAISES(NODE) TREE_OPERAND (EH_SPEC_BLOCK_CHECK (NODE), 1)
4006 #define USING_STMT_NAMESPACE(NODE) TREE_OPERAND (USING_STMT_CHECK (NODE), 0)
4009 #define FN_TRY_BLOCK_P(NODE) TREE_LANG_FLAG_3 (TRY_BLOCK_CHECK (NODE))
4010 #define HANDLER_PARMS(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 0)
4011 #define HANDLER_BODY(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 1)
4012 #define HANDLER_TYPE(NODE) TREE_TYPE (HANDLER_CHECK (NODE))
4016 #define CLEANUP_BODY(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 0)
4017 #define CLEANUP_EXPR(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 1)
4018 #define CLEANUP_DECL(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 2)
4023 #define IF_COND(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 0)
4024 #define THEN_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 1)
4025 #define ELSE_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 2)
4026 #define IF_SCOPE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 3)
4030 #define WHILE_COND(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0)
4031 #define WHILE_BODY(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1)
4035 #define DO_COND(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 0)
4036 #define DO_BODY(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 1)
4041 #define FOR_INIT_STMT(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 0)
4042 #define FOR_COND(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 1)
4043 #define FOR_EXPR(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
4044 #define FOR_BODY(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
4045 #define FOR_SCOPE(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 4)
4049 #define RANGE_FOR_DECL(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 0)
4050 #define RANGE_FOR_EXPR(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 1)
4051 #define RANGE_FOR_BODY(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 2)
4052 #define RANGE_FOR_SCOPE(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 3)
4054 #define SWITCH_STMT_COND(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0)
4055 #define SWITCH_STMT_BODY(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1)
4056 #define SWITCH_STMT_TYPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
4057 #define SWITCH_STMT_SCOPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 3)
4060 #define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0)
4064 #define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0)
4068 #define TARGET_EXPR_IMPLICIT_P(NODE) \
4069 TREE_LANG_FLAG_0 (TARGET_EXPR_CHECK (NODE))
4073 #define TARGET_EXPR_LIST_INIT_P(NODE) \
4074 TREE_LANG_FLAG_1 (TARGET_EXPR_CHECK (NODE))
4078 #define TARGET_EXPR_DIRECT_INIT_P(NODE) \
4079 TREE_LANG_FLAG_2 (TARGET_EXPR_CHECK (NODE))
4088 #define CONVERT_EXPR_VBASE_PATH(NODE) \
4089 TREE_LANG_FLAG_0 (CONVERT_EXPR_CHECK (NODE))
4092 #define SIZEOF_EXPR_TYPE_P(NODE) \
4093 TREE_LANG_FLAG_0 (SIZEOF_EXPR_CHECK (NODE))
4262 /* Node for "pointer to (virtual) function".
4579 #define TEMPLATE_PARM_INDEX_CAST(NODE) \
4580 ((template_parm_index*)TEMPLATE_PARM_INDEX_CHECK (NODE))
4581 #define TEMPLATE_PARM_IDX(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->index)
4582 #define TEMPLATE_PARM_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->level)
4583 #define TEMPLATE_PARM_DESCENDANTS(NODE) (TREE_CHAIN (NODE))
4584 #define TEMPLATE_PARM_ORIG_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->orig_level)
4585 #define TEMPLATE_PARM_DECL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->decl)
4586 #define TEMPLATE_PARM_PARAMETER_PACK(NODE) \
4587 (TREE_LANG_FLAG_0 (TEMPLATE_PARM_INDEX_CHECK (NODE)))
4591 #define TEMPLATE_TYPE_PARM_INDEX(NODE) \
4592 (TYPE_VALUES_RAW (TREE_CHECK3 ((NODE), TEMPLATE_TYPE_PARM, \
4595 #define TEMPLATE_TYPE_IDX(NODE) \
4596 (TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4597 #define TEMPLATE_TYPE_LEVEL(NODE) \
4598 (TEMPLATE_PARM_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4599 #define TEMPLATE_TYPE_ORIG_LEVEL(NODE) \
4600 (TEMPLATE_PARM_ORIG_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4601 #define TEMPLATE_TYPE_DECL(NODE) \
4602 (TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4603 #define TEMPLATE_TYPE_PARAMETER_PACK(NODE) \
4604 (TEMPLATE_PARM_PARAMETER_PACK (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4643 node. */
4644 #define TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL(NODE) \
4645 ((TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM) \
4646 ? TYPE_TI_TEMPLATE (NODE) \
4647 : TYPE_NAME (NODE))
4905 /* The original node. Can be either a DECL (for a function or static