/* Core data structures for the 'tree' type.
- Copyright (C) 1989-2023 Free Software Foundation, Inc.
+ Copyright (C) 1989-2024 Free Software Foundation, Inc.
This file is part of GCC.
/* Nonzero if this is a cold function. */
#define ECF_COLD (1 << 15)
+/* Nonzero if this is a function expected to end with an exception. */
+#define ECF_XTHROW (1 << 16)
+
/* Call argument flags. */
/* Nonzero if the argument is not used by the function. */
/* OpenACC/OpenMP clause: if (scalar-expression). */
OMP_CLAUSE_IF,
+ /* OpenACC clause: self. */
+ OMP_CLAUSE_SELF,
+
/* OpenMP clause: num_threads (integer-expression). */
OMP_CLAUSE_NUM_THREADS,
/* OpenMP clause: filter (integer-expression). */
OMP_CLAUSE_FILTER,
+ /* OpenMP clause: indirect [(constant-integer-expression)]. */
+ OMP_CLAUSE_INDIRECT,
+
/* Internally used only clause, holding SIMD uid. */
OMP_CLAUSE__SIMDUID_,
enum omp_clause_defaultmap_kind {
OMP_CLAUSE_DEFAULTMAP_CATEGORY_UNSPECIFIED,
+ OMP_CLAUSE_DEFAULTMAP_CATEGORY_ALL,
OMP_CLAUSE_DEFAULTMAP_CATEGORY_SCALAR,
OMP_CLAUSE_DEFAULTMAP_CATEGORY_AGGREGATE,
OMP_CLAUSE_DEFAULTMAP_CATEGORY_ALLOCATABLE,
annot_expr_no_vector_kind,
annot_expr_vector_kind,
annot_expr_parallel_kind,
+ annot_expr_maybe_infinite_kind,
annot_expr_kind_last
};
-/* The kind of a TREE_CLOBBER_P CONSTRUCTOR node. */
+/* The kind of a TREE_CLOBBER_P CONSTRUCTOR node. Other than _UNDEF, these are
+ in roughly sequential order. */
enum clobber_kind {
/* Unspecified, this clobber acts as a store of an undefined value. */
CLOBBER_UNDEF,
- /* This clobber ends the lifetime of the storage. */
- CLOBBER_EOL,
+ /* Beginning of storage duration, e.g. malloc. */
+ CLOBBER_STORAGE_BEGIN,
+ /* Beginning of object data, e.g. start of C++ constructor. This differs
+ from C++ 'lifetime', which starts when initialization is complete; a
+ clobber there would discard the initialization. */
+ CLOBBER_OBJECT_BEGIN,
+ /* End of object data, e.g. end of C++ destructor. */
+ CLOBBER_OBJECT_END,
+ /* End of storage duration, e.g. free. */
+ CLOBBER_STORAGE_END,
CLOBBER_LAST
};
unsigned spare1 : 8;
- /* This field is only used with TREE_TYPE nodes; the only reason it is
+ /* For _TYPE nodes, this is TYPE_ADDR_SPACE; the reason it is
present in tree_base instead of tree_type is to save space. The size
of the field must be large enough to hold addr_space_t values.
- For CONSTRUCTOR nodes this holds the clobber_kind enum. */
+ For CONSTRUCTOR nodes this holds the clobber_kind enum.
+ The C++ front-end uses this in IDENTIFIER_NODE and NAMESPACE_DECL. */
unsigned address_space : 8;
} bits;
struct {
/* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
its native precision. */
- unsigned char unextended;
+ unsigned short unextended;
/* The number of HOST_WIDE_INTs if the INTEGER_CST is extended to
wider precisions based on its TYPE_SIGN. */
- unsigned char extended;
-
- /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
- offset_int precision, with smaller integers being extended
- according to their TYPE_SIGN. This is equal to one of the two
- fields above but is cached for speed. */
- unsigned char offset;
+ unsigned short extended;
} int_length;
/* VEC length. This field is only used with TREE_VEC. */
TYPE_READONLY in
all types
+ OMP_CLAUSE_MAP_READONLY in
+ OMP_CLAUSE_MAP
+
+ OMP_CLAUSE__CACHE__READONLY in
+ OMP_CLAUSE__CACHE_
+
constant_flag:
TREE_CONSTANT in
DECL_NONALIASED in
VAR_DECL
+ CHREC_NOWRAP in
+ POLYNOMIAL_CHREC
+
deprecated_flag:
TREE_DEPRECATED in
struct GTY(()) tree_exp {
struct tree_typed typed;
location_t locus;
+ /* Discriminator for basic conditions in a Boolean expressions. Trees that
+ are operands of the same Boolean expression should have the same uid. */
+ unsigned condition_uid;
tree GTY ((length ("TREE_OPERAND_LENGTH ((tree)&%h)"))) operands[1];
};
unsigned typeless_storage : 1;
unsigned empty_flag : 1;
unsigned indivisible_p : 1;
+ /* TYPE_NO_NAMED_ARGS_STDARG_P for a stdarg function.
+ Or TYPE_INCLUDES_FLEXARRAY for RECORD_TYPE and UNION_TYPE. */
unsigned no_named_args_stdarg_p : 1;
unsigned spare : 1;