Next: Blocks, Up: Statements [Contents][Index]
ASM_EXPRUsed to represent an inline assembly statement. For an inline assembly statement like:
asm ("mov x, y");
The ASM_STRING macro will return a STRING_CST node for
"mov x, y". If the original statement made use of the
extended-assembly syntax, then ASM_OUTPUTS,
ASM_INPUTS, and ASM_CLOBBERS will be the outputs, inputs,
and clobbers for the statement, represented as STRING_CST nodes.
The extended-assembly syntax looks like:
asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
The first string is the ASM_STRING, containing the instruction
template. The next two strings are the output and inputs, respectively;
this statement has no clobbers. As this example indicates, “plain”
assembly statements are merely a special case of extended assembly
statements; they have no cv-qualifiers, outputs, inputs, or clobbers.
All of the strings will be NUL-terminated, and will contain no
embedded NUL-characters.
If the assembly statement is declared volatile, or if the
statement was not an extended assembly statement, and is therefore
implicitly volatile, then the predicate ASM_VOLATILE_P will hold
of the ASM_EXPR.
DECL_EXPRUsed to represent a local declaration. The DECL_EXPR_DECL macro
can be used to obtain the entity declared. This declaration may be a
LABEL_DECL, indicating that the label declared is a local label.
(As an extension, GCC allows the declaration of labels with scope.) In
C, this declaration may be a FUNCTION_DECL, indicating the
use of the GCC nested function extension. For more information,
see Functions.
LABEL_EXPRUsed to represent a label. The LABEL_DECL declared by this
statement can be obtained with the LABEL_EXPR_LABEL macro. The
IDENTIFIER_NODE giving the name of the label can be obtained from
the LABEL_DECL with DECL_NAME.
GOTO_EXPRUsed to represent a goto statement. The GOTO_DESTINATION will
usually be a LABEL_DECL. However, if the “computed goto” extension
has been used, the GOTO_DESTINATION will be an arbitrary expression
indicating the destination. This expression will always have pointer type.
RETURN_EXPRUsed to represent a return statement. Operand 0 represents the
value to return. It should either be the RESULT_DECL for the
containing function, or a MODIFY_EXPR or INIT_EXPR
setting the function’s RESULT_DECL. It will be
NULL_TREE if the statement was just
return;
LOOP_EXPRThese nodes represent “infinite” loops. The LOOP_EXPR_BODY
represents the body of the loop. It should be executed forever, unless
an EXIT_EXPR is encountered.
EXIT_EXPRThese nodes represent conditional exits from the nearest enclosing
LOOP_EXPR. The single operand is the condition; if it is
nonzero, then the loop should be exited. An EXIT_EXPR will only
appear within a LOOP_EXPR.
SWITCH_EXPRUsed to represent a switch statement. The SWITCH_COND
is the expression on which the switch is occurring. The
SWITCH_BODY is the body of the switch statement.
SWITCH_ALL_CASES_P is true if the switch includes a default
label or the case label ranges cover all possible values of the
condition expression.
Note that TREE_TYPE for a SWITCH_EXPR represents the
original type of switch expression as given in the source, before any
compiler conversions, instead of the type of the switch expression
itself (which is not meaningful).
CASE_LABEL_EXPRUse to represent a case label, range of case labels, or a
default label. If CASE_LOW is NULL_TREE, then this is a
default label. Otherwise, if CASE_HIGH is NULL_TREE, then
this is an ordinary case label. In this case, CASE_LOW is
an expression giving the value of the label. Both CASE_LOW and
CASE_HIGH are INTEGER_CST nodes. These values will have
the same type as the condition expression in the switch statement.
Otherwise, if both CASE_LOW and CASE_HIGH are defined, the
statement is a range of case labels. Such statements originate with the
extension that allows users to write things of the form:
case 2 ... 5:
The first value will be CASE_LOW, while the second will be
CASE_HIGH.
DEBUG_BEGIN_STMTMarks the beginning of a source statement, for purposes of debug information generation.
Next: Blocks, Up: Statements [Contents][Index]