comparison gcc/doc/generic.texi @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
comparison
equal deleted inserted replaced
111:04ced10e8804 131:84e7813d76e9
1 @c Copyright (C) 2004-2017 Free Software Foundation, Inc. 1 @c Copyright (C) 2004-2018 Free Software Foundation, Inc.
2 @c This is part of the GCC manual. 2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi. 3 @c For copying conditions, see the file gcc.texi.
4 4
5 @c --------------------------------------------------------------------- 5 @c ---------------------------------------------------------------------
6 @c GENERIC 6 @c GENERIC
1035 @tindex REAL_CST 1035 @tindex REAL_CST
1036 @tindex FIXED_CST 1036 @tindex FIXED_CST
1037 @tindex COMPLEX_CST 1037 @tindex COMPLEX_CST
1038 @tindex VECTOR_CST 1038 @tindex VECTOR_CST
1039 @tindex STRING_CST 1039 @tindex STRING_CST
1040 @tindex POLY_INT_CST
1040 @findex TREE_STRING_LENGTH 1041 @findex TREE_STRING_LENGTH
1041 @findex TREE_STRING_POINTER 1042 @findex TREE_STRING_POINTER
1042 1043
1043 The table below begins with constants, moves on to unary expressions, 1044 The table below begins with constants, moves on to unary expressions,
1044 then proceeds to binary expressions, and concludes with various other 1045 then proceeds to binary expressions, and concludes with various other
1082 @code{__complex__} whose parts are constant nodes. The 1083 @code{__complex__} whose parts are constant nodes. The
1083 @code{TREE_REALPART} and @code{TREE_IMAGPART} return the real and the 1084 @code{TREE_REALPART} and @code{TREE_IMAGPART} return the real and the
1084 imaginary parts respectively. 1085 imaginary parts respectively.
1085 1086
1086 @item VECTOR_CST 1087 @item VECTOR_CST
1087 These nodes are used to represent vector constants, whose parts are 1088 These nodes are used to represent vector constants. Each vector
1088 constant nodes. Each individual constant node is either an integer or a 1089 constant @var{v} is treated as a specific instance of an arbitrary-length
1089 double constant node. The first operand is a @code{TREE_LIST} of the 1090 sequence that itself contains @samp{VECTOR_CST_NPATTERNS (@var{v})}
1090 constant nodes and is accessed through @code{TREE_VECTOR_CST_ELTS}. 1091 interleaved patterns. Each pattern has the form:
1092
1093 @smallexample
1094 @{ @var{base0}, @var{base1}, @var{base1} + @var{step}, @var{base1} + @var{step} * 2, @dots{} @}
1095 @end smallexample
1096
1097 The first three elements in each pattern are enough to determine the
1098 values of the other elements. However, if all @var{step}s are zero,
1099 only the first two elements are needed. If in addition each @var{base1}
1100 is equal to the corresponding @var{base0}, only the first element in
1101 each pattern is needed. The number of encoded elements per pattern
1102 is given by @samp{VECTOR_CST_NELTS_PER_PATTERN (@var{v})}.
1103
1104 For example, the constant:
1105
1106 @smallexample
1107 @{ 0, 1, 2, 6, 3, 8, 4, 10, 5, 12, 6, 14, 7, 16, 8, 18 @}
1108 @end smallexample
1109
1110 is interpreted as an interleaving of the sequences:
1111
1112 @smallexample
1113 @{ 0, 2, 3, 4, 5, 6, 7, 8 @}
1114 @{ 1, 6, 8, 10, 12, 14, 16, 18 @}
1115 @end smallexample
1116
1117 where the sequences are represented by the following patterns:
1118
1119 @smallexample
1120 @var{base0} == 0, @var{base1} == 2, @var{step} == 1
1121 @var{base0} == 1, @var{base1} == 6, @var{step} == 2
1122 @end smallexample
1123
1124 In this case:
1125
1126 @smallexample
1127 VECTOR_CST_NPATTERNS (@var{v}) == 2
1128 VECTOR_CST_NELTS_PER_PATTERN (@var{v}) == 3
1129 @end smallexample
1130
1131 The vector is therefore encoded using the first 6 elements
1132 (@samp{@{ 0, 1, 2, 6, 3, 8 @}}), with the remaining 10 elements
1133 being implicit extensions of them.
1134
1135 Sometimes this scheme can create two possible encodings of the same
1136 vector. For example @{ 0, 1 @} could be seen as two patterns with
1137 one element each or one pattern with two elements (@var{base0} and
1138 @var{base1}). The canonical encoding is always the one with the
1139 fewest patterns or (if both encodings have the same number of
1140 petterns) the one with the fewest encoded elements.
1141
1142 @samp{vector_cst_encoding_nelts (@var{v})} gives the total number of
1143 encoded elements in @var{v}, which is 6 in the example above.
1144 @code{VECTOR_CST_ENCODED_ELTS (@var{v})} gives a pointer to the elements
1145 encoded in @var{v} and @code{VECTOR_CST_ENCODED_ELT (@var{v}, @var{i})}
1146 accesses the value of encoded element @var{i}.
1147
1148 @samp{VECTOR_CST_DUPLICATE_P (@var{v})} is true if @var{v} simply contains
1149 repeated instances of @samp{VECTOR_CST_NPATTERNS (@var{v})} values. This is
1150 a shorthand for testing @samp{VECTOR_CST_NELTS_PER_PATTERN (@var{v}) == 1}.
1151
1152 @samp{VECTOR_CST_STEPPED_P (@var{v})} is true if at least one
1153 pattern in @var{v} has a nonzero step. This is a shorthand for
1154 testing @samp{VECTOR_CST_NELTS_PER_PATTERN (@var{v}) == 3}.
1155
1156 The utility function @code{vector_cst_elt} gives the value of an
1157 arbitrary index as a @code{tree}. @code{vector_cst_int_elt} gives
1158 the same value as a @code{wide_int}.
1091 1159
1092 @item STRING_CST 1160 @item STRING_CST
1093 These nodes represent string-constants. The @code{TREE_STRING_LENGTH} 1161 These nodes represent string-constants. The @code{TREE_STRING_LENGTH}
1094 returns the length of the string, as an @code{int}. The 1162 returns the length of the string, as an @code{int}. The
1095 @code{TREE_STRING_POINTER} is a @code{char*} containing the string 1163 @code{TREE_STRING_POINTER} is a @code{char*} containing the string
1105 non-wide string constants are distinguished only by the @code{TREE_TYPE} 1173 non-wide string constants are distinguished only by the @code{TREE_TYPE}
1106 of the @code{STRING_CST}. 1174 of the @code{STRING_CST}.
1107 1175
1108 FIXME: The formats of string constants are not well-defined when the 1176 FIXME: The formats of string constants are not well-defined when the
1109 target system bytes are not the same width as host system bytes. 1177 target system bytes are not the same width as host system bytes.
1178
1179 @item POLY_INT_CST
1180 These nodes represent invariants that depend on some target-specific
1181 runtime parameters. They consist of @code{NUM_POLY_INT_COEFFS}
1182 coefficients, with the first coefficient being the constant term and
1183 the others being multipliers that are applied to the runtime parameters.
1184
1185 @code{POLY_INT_CST_ELT (@var{x}, @var{i})} references coefficient number
1186 @var{i} of @code{POLY_INT_CST} node @var{x}. Each coefficient is an
1187 @code{INTEGER_CST}.
1110 1188
1111 @end table 1189 @end table
1112 1190
1113 @node Storage References 1191 @node Storage References
1114 @subsection References to storage 1192 @subsection References to storage
1222 @tindex TRUTH_ORIF_EXPR 1300 @tindex TRUTH_ORIF_EXPR
1223 @tindex TRUTH_AND_EXPR 1301 @tindex TRUTH_AND_EXPR
1224 @tindex TRUTH_OR_EXPR 1302 @tindex TRUTH_OR_EXPR
1225 @tindex TRUTH_XOR_EXPR 1303 @tindex TRUTH_XOR_EXPR
1226 @tindex POINTER_PLUS_EXPR 1304 @tindex POINTER_PLUS_EXPR
1305 @tindex POINTER_DIFF_EXPR
1227 @tindex PLUS_EXPR 1306 @tindex PLUS_EXPR
1228 @tindex MINUS_EXPR 1307 @tindex MINUS_EXPR
1229 @tindex MULT_EXPR 1308 @tindex MULT_EXPR
1230 @tindex MULT_HIGHPART_EXPR 1309 @tindex MULT_HIGHPART_EXPR
1231 @tindex RDIV_EXPR 1310 @tindex RDIV_EXPR
1411 always of @code{BOOLEAN_TYPE} or @code{INTEGER_TYPE}. 1490 always of @code{BOOLEAN_TYPE} or @code{INTEGER_TYPE}.
1412 1491
1413 @item POINTER_PLUS_EXPR 1492 @item POINTER_PLUS_EXPR
1414 This node represents pointer arithmetic. The first operand is always 1493 This node represents pointer arithmetic. The first operand is always
1415 a pointer/reference type. The second operand is always an unsigned 1494 a pointer/reference type. The second operand is always an unsigned
1416 integer type compatible with sizetype. This is the only binary 1495 integer type compatible with sizetype. This and POINTER_DIFF_EXPR are
1417 arithmetic operand that can operate on pointer types. 1496 the only binary arithmetic operators that can operate on pointer types.
1497
1498 @item POINTER_DIFF_EXPR
1499 This node represents pointer subtraction. The two operands always
1500 have pointer/reference type. It returns a signed integer of the same
1501 precision as the pointers. The behavior is undefined if the difference
1502 of the two pointers, seen as infinite precision non-negative integers,
1503 does not fit in the result type. The result does not depend on the
1504 pointer type, it is not divided by the size of the pointed-to type.
1418 1505
1419 @item PLUS_EXPR 1506 @item PLUS_EXPR
1420 @itemx MINUS_EXPR 1507 @itemx MINUS_EXPR
1421 @itemx MULT_EXPR 1508 @itemx MULT_EXPR
1422 These nodes represent various binary arithmetic operations. 1509 These nodes represent various binary arithmetic operations.
1555 represented conveniently as @code{(i >= 0 && i < 10) ? i : abort()}. 1642 represented conveniently as @code{(i >= 0 && i < 10) ? i : abort()}.
1556 1643
1557 As a GNU extension, the C language front-ends allow the second 1644 As a GNU extension, the C language front-ends allow the second
1558 operand of the @code{?:} operator may be omitted in the source. 1645 operand of the @code{?:} operator may be omitted in the source.
1559 For example, @code{x ? : 3} is equivalent to @code{x ? x : 3}, 1646 For example, @code{x ? : 3} is equivalent to @code{x ? x : 3},
1560 assuming that @code{x} is an expression without side-effects. 1647 assuming that @code{x} is an expression without side effects.
1561 In the tree representation, however, the second operand is always 1648 In the tree representation, however, the second operand is always
1562 present, possibly protected by @code{SAVE_EXPR} if the first 1649 present, possibly protected by @code{SAVE_EXPR} if the first
1563 argument does cause side-effects. 1650 argument does cause side effects.
1564 1651
1565 @item CALL_EXPR 1652 @item CALL_EXPR
1566 These nodes are used to represent calls to functions, including 1653 These nodes are used to represent calls to functions, including
1567 non-static member functions. @code{CALL_EXPR}s are implemented as 1654 non-static member functions. @code{CALL_EXPR}s are implemented as
1568 expression nodes with a variable number of operands. Rather than using 1655 expression nodes with a variable number of operands. Rather than using
1643 by the @code{COMPOUND_LITERAL_EXPR_DECL} macro. 1730 by the @code{COMPOUND_LITERAL_EXPR_DECL} macro.
1644 1731
1645 @item SAVE_EXPR 1732 @item SAVE_EXPR
1646 1733
1647 A @code{SAVE_EXPR} represents an expression (possibly involving 1734 A @code{SAVE_EXPR} represents an expression (possibly involving
1648 side-effects) that is used more than once. The side-effects should 1735 side effects) that is used more than once. The side effects should
1649 occur only the first time the expression is evaluated. Subsequent uses 1736 occur only the first time the expression is evaluated. Subsequent uses
1650 should just reuse the computed value. The first operand to the 1737 should just reuse the computed value. The first operand to the
1651 @code{SAVE_EXPR} is the expression to evaluate. The side-effects should 1738 @code{SAVE_EXPR} is the expression to evaluate. The side effects should
1652 be executed where the @code{SAVE_EXPR} is first encountered in a 1739 be executed where the @code{SAVE_EXPR} is first encountered in a
1653 depth-first preorder traversal of the expression tree. 1740 depth-first preorder traversal of the expression tree.
1654 1741
1655 @item TARGET_EXPR 1742 @item TARGET_EXPR
1656 A @code{TARGET_EXPR} represents a temporary object. The first operand 1743 A @code{TARGET_EXPR} represents a temporary object. The first operand
1684 its sole argument yields the representation for @code{ap}. 1771 its sole argument yields the representation for @code{ap}.
1685 1772
1686 @item ANNOTATE_EXPR 1773 @item ANNOTATE_EXPR
1687 This node is used to attach markers to an expression. The first operand 1774 This node is used to attach markers to an expression. The first operand
1688 is the annotated expression, the second is an @code{INTEGER_CST} with 1775 is the annotated expression, the second is an @code{INTEGER_CST} with
1689 a value from @code{enum annot_expr_kind}. 1776 a value from @code{enum annot_expr_kind}, the third is an @code{INTEGER_CST}.
1690 @end table 1777 @end table
1691 1778
1692 1779
1693 @node Vectors 1780 @node Vectors
1694 @subsection Vectors 1781 @subsection Vectors
1782 @tindex VEC_DUPLICATE_EXPR
1783 @tindex VEC_SERIES_EXPR
1695 @tindex VEC_LSHIFT_EXPR 1784 @tindex VEC_LSHIFT_EXPR
1696 @tindex VEC_RSHIFT_EXPR 1785 @tindex VEC_RSHIFT_EXPR
1697 @tindex VEC_WIDEN_MULT_HI_EXPR 1786 @tindex VEC_WIDEN_MULT_HI_EXPR
1698 @tindex VEC_WIDEN_MULT_LO_EXPR 1787 @tindex VEC_WIDEN_MULT_LO_EXPR
1699 @tindex VEC_UNPACK_HI_EXPR 1788 @tindex VEC_UNPACK_HI_EXPR
1700 @tindex VEC_UNPACK_LO_EXPR 1789 @tindex VEC_UNPACK_LO_EXPR
1701 @tindex VEC_UNPACK_FLOAT_HI_EXPR 1790 @tindex VEC_UNPACK_FLOAT_HI_EXPR
1702 @tindex VEC_UNPACK_FLOAT_LO_EXPR 1791 @tindex VEC_UNPACK_FLOAT_LO_EXPR
1792 @tindex VEC_UNPACK_FIX_TRUNC_HI_EXPR
1793 @tindex VEC_UNPACK_FIX_TRUNC_LO_EXPR
1703 @tindex VEC_PACK_TRUNC_EXPR 1794 @tindex VEC_PACK_TRUNC_EXPR
1704 @tindex VEC_PACK_SAT_EXPR 1795 @tindex VEC_PACK_SAT_EXPR
1705 @tindex VEC_PACK_FIX_TRUNC_EXPR 1796 @tindex VEC_PACK_FIX_TRUNC_EXPR
1797 @tindex VEC_PACK_FLOAT_EXPR
1798 @tindex VEC_COND_EXPR
1706 @tindex SAD_EXPR 1799 @tindex SAD_EXPR
1707 1800
1708 @table @code 1801 @table @code
1802 @item VEC_DUPLICATE_EXPR
1803 This node has a single operand and represents a vector in which every
1804 element is equal to that operand.
1805
1806 @item VEC_SERIES_EXPR
1807 This node represents a vector formed from a scalar base and step,
1808 given as the first and second operands respectively. Element @var{i}
1809 of the result is equal to @samp{@var{base} + @var{i}*@var{step}}.
1810
1811 This node is restricted to integral types, in order to avoid
1812 specifying the rounding behavior for floating-point types.
1813
1709 @item VEC_LSHIFT_EXPR 1814 @item VEC_LSHIFT_EXPR
1710 @itemx VEC_RSHIFT_EXPR 1815 @itemx VEC_RSHIFT_EXPR
1711 These nodes represent whole vector left and right shifts, respectively. 1816 These nodes represent whole vector left and right shifts, respectively.
1712 The first operand is the vector to shift; it will always be of vector type. 1817 The first operand is the vector to shift; it will always be of vector type.
1713 The second operand is an expression for the number of bits by which to 1818 The second operand is an expression for the number of bits by which to
1742 These nodes represent unpacking of the high and low parts of the input vector, 1847 These nodes represent unpacking of the high and low parts of the input vector,
1743 where the values are converted from fixed point to floating point. The 1848 where the values are converted from fixed point to floating point. The
1744 single operand is a vector that contains @code{N} elements of the same 1849 single operand is a vector that contains @code{N} elements of the same
1745 integral type. The result is a vector that contains half as many elements 1850 integral type. The result is a vector that contains half as many elements
1746 of a floating point type whose size is twice as wide. In the case of 1851 of a floating point type whose size is twice as wide. In the case of
1747 @code{VEC_UNPACK_HI_EXPR} the high @code{N/2} elements of the vector are 1852 @code{VEC_UNPACK_FLOAT_HI_EXPR} the high @code{N/2} elements of the vector are
1748 extracted, converted and widened. In the case of @code{VEC_UNPACK_LO_EXPR} 1853 extracted, converted and widened. In the case of @code{VEC_UNPACK_FLOAT_LO_EXPR}
1749 the low @code{N/2} elements of the vector are extracted, converted and widened. 1854 the low @code{N/2} elements of the vector are extracted, converted and widened.
1855
1856 @item VEC_UNPACK_FIX_TRUNC_HI_EXPR
1857 @itemx VEC_UNPACK_FIX_TRUNC_LO_EXPR
1858 These nodes represent unpacking of the high and low parts of the input vector,
1859 where the values are truncated from floating point to fixed point. The
1860 single operand is a vector that contains @code{N} elements of the same
1861 floating point type. The result is a vector that contains half as many
1862 elements of an integral type whose size is twice as wide. In the case of
1863 @code{VEC_UNPACK_FIX_TRUNC_HI_EXPR} the high @code{N/2} elements of the
1864 vector are extracted and converted with truncation. In the case of
1865 @code{VEC_UNPACK_FIX_TRUNC_LO_EXPR} the low @code{N/2} elements of the
1866 vector are extracted and converted with truncation.
1750 1867
1751 @item VEC_PACK_TRUNC_EXPR 1868 @item VEC_PACK_TRUNC_EXPR
1752 This node represents packing of truncated elements of the two input vectors 1869 This node represents packing of truncated elements of the two input vectors
1753 into the output vector. Input operands are vectors that contain the same 1870 into the output vector. Input operands are vectors that contain the same
1754 number of elements of the same integral or floating point type. The result 1871 number of elements of the same integral or floating point type. The result
1770 to fixed point. Input operands are vectors that contain the same number 1887 to fixed point. Input operands are vectors that contain the same number
1771 of elements of a floating point type. The result is a vector that contains 1888 of elements of a floating point type. The result is a vector that contains
1772 twice as many elements of an integral type whose size is half as wide. The 1889 twice as many elements of an integral type whose size is half as wide. The
1773 elements of the two vectors are merged (concatenated) to form the output 1890 elements of the two vectors are merged (concatenated) to form the output
1774 vector. 1891 vector.
1892
1893 @item VEC_PACK_FLOAT_EXPR
1894 This node represents packing of elements of the two input vectors into the
1895 output vector, where the values are converted from fixed point to floating
1896 point. Input operands are vectors that contain the same number of elements
1897 of an integral type. The result is a vector that contains twice as many
1898 elements of floating point type whose size is half as wide. The elements of
1899 the two vectors are merged (concatenated) to form the output vector.
1775 1900
1776 @item VEC_COND_EXPR 1901 @item VEC_COND_EXPR
1777 These nodes represent @code{?:} expressions. The three operands must be 1902 These nodes represent @code{?:} expressions. The three operands must be
1778 vectors of the same size and number of elements. The second and third 1903 vectors of the same size and number of elements. The second and third
1779 operands must have the same type as the entire expression. The first 1904 operands must have the same type as the entire expression. The first
1928 case 2 ... 5: 2053 case 2 ... 5:
1929 @end smallexample 2054 @end smallexample
1930 The first value will be @code{CASE_LOW}, while the second will be 2055 The first value will be @code{CASE_LOW}, while the second will be
1931 @code{CASE_HIGH}. 2056 @code{CASE_HIGH}.
1932 2057
2058 @item DEBUG_BEGIN_STMT
2059
2060 Marks the beginning of a source statement, for purposes of debug
2061 information generation.
2062
1933 @end table 2063 @end table
1934 2064
1935 2065
1936 @node Blocks 2066 @node Blocks
1937 @subsection Blocks 2067 @subsection Blocks
2066 @tindex OMP_CONTINUE 2196 @tindex OMP_CONTINUE
2067 @tindex OMP_ATOMIC 2197 @tindex OMP_ATOMIC
2068 @tindex OMP_CLAUSE 2198 @tindex OMP_CLAUSE
2069 2199
2070 All the statements starting with @code{OMP_} represent directives and 2200 All the statements starting with @code{OMP_} represent directives and
2071 clauses used by the OpenMP API @w{@uref{http://www.openmp.org/}}. 2201 clauses used by the OpenMP API @w{@uref{https://www.openmp.org}}.
2072 2202
2073 @table @code 2203 @table @code
2074 @item OMP_PARALLEL 2204 @item OMP_PARALLEL
2075 2205
2076 Represents @code{#pragma omp parallel [clause1 @dots{} clauseN]}. It 2206 Represents @code{#pragma omp parallel [clause1 @dots{} clauseN]}. It
2113 of the form @code{VAR @{<,>,<=,>=@} N2}. 2243 of the form @code{VAR @{<,>,<=,>=@} N2}.
2114 2244
2115 Operand @code{OMP_FOR_INCR} is the loop index increment of the 2245 Operand @code{OMP_FOR_INCR} is the loop index increment of the
2116 form @code{VAR @{+=,-=@} INCR}. 2246 form @code{VAR @{+=,-=@} INCR}.
2117 2247
2118 Operand @code{OMP_FOR_PRE_BODY} contains side-effect code from 2248 Operand @code{OMP_FOR_PRE_BODY} contains side effect code from
2119 operands @code{OMP_FOR_INIT}, @code{OMP_FOR_COND} and 2249 operands @code{OMP_FOR_INIT}, @code{OMP_FOR_COND} and
2120 @code{OMP_FOR_INC}. These side-effects are part of the 2250 @code{OMP_FOR_INC}. These side effects are part of the
2121 @code{OMP_FOR} block but must be evaluated before the start of 2251 @code{OMP_FOR} block but must be evaluated before the start of
2122 loop body. 2252 loop body.
2123 2253
2124 The loop index variable @code{VAR} must be a signed integer variable, 2254 The loop index variable @code{VAR} must be a signed integer variable,
2125 which is implicitly private to each thread. Bounds 2255 which is implicitly private to each thread. Bounds
2126 @code{N1} and @code{N2} and the increment expression 2256 @code{N1} and @code{N2} and the increment expression
2127 @code{INCR} are required to be loop invariant integer 2257 @code{INCR} are required to be loop invariant integer
2128 expressions that are evaluated without any synchronization. The 2258 expressions that are evaluated without any synchronization. The
2129 evaluation order, frequency of evaluation and side-effects are 2259 evaluation order, frequency of evaluation and side effects are
2130 unspecified by the standard. 2260 unspecified by the standard.
2131 2261
2132 @item OMP_SECTIONS 2262 @item OMP_SECTIONS
2133 2263
2134 Represents @code{#pragma omp sections [clause1 @dots{} clauseN]}. 2264 Represents @code{#pragma omp sections [clause1 @dots{} clauseN]}.
3223 @item BREAK_STMT 3353 @item BREAK_STMT
3224 3354
3225 Used to represent a @code{break} statement. There are no additional 3355 Used to represent a @code{break} statement. There are no additional
3226 fields. 3356 fields.
3227 3357
3228 @item CILK_SPAWN_STMT
3229
3230 Used to represent a spawning function in the Cilk Plus language extension.
3231 This tree has one field that holds the name of the spawning function.
3232 @code{_Cilk_spawn} can be written in C in the following way:
3233
3234 @smallexample
3235 @code{_Cilk_spawn} <function_name> (<parameters>);
3236 @end smallexample
3237
3238 Detailed description for usage and functionality of @code{_Cilk_spawn} can be
3239 found at @uref{https://www.cilkplus.org}.
3240
3241 @item CILK_SYNC_STMT
3242
3243 This statement is part of the Cilk Plus language extension. It indicates that
3244 the current function cannot continue in parallel with its spawned children.
3245 There are no additional fields. @code{_Cilk_sync} can be written in C in the
3246 following way:
3247
3248 @smallexample
3249 @code{_Cilk_sync};
3250 @end smallexample
3251
3252 @item CLEANUP_STMT 3358 @item CLEANUP_STMT
3253 3359
3254 Used to represent an action that should take place upon exit from the 3360 Used to represent an action that should take place upon exit from the
3255 enclosing scope. Typically, these actions are calls to destructors for 3361 enclosing scope. Typically, these actions are calls to destructors for
3256 local objects, but back ends cannot rely on this fact. If these nodes 3362 local objects, but back ends cannot rely on this fact. If these nodes