gccint: Basic Statements
1
1 11.7.1 Basic Statements
1 -----------------------
1
1 'ASM_EXPR'
1
1 Used to represent an inline assembly statement. For an inline
1 assembly statement like:
1 asm ("mov x, y");
1 The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x,
1 y"'. If the original statement made use of the extended-assembly
1 syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will
1 be the outputs, inputs, and clobbers for the statement, represented
1 as 'STRING_CST' nodes. The extended-assembly syntax looks like:
1 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
1 The first string is the 'ASM_STRING', containing the instruction
1 template. The next two strings are the output and inputs,
1 respectively; this statement has no clobbers. As this example
1 indicates, "plain" assembly statements are merely a special case of
1 extended assembly statements; they have no cv-qualifiers, outputs,
1 inputs, or clobbers. All of the strings will be 'NUL'-terminated,
1 and will contain no embedded 'NUL'-characters.
1
1 If the assembly statement is declared 'volatile', or if the
1 statement was not an extended assembly statement, and is therefore
1 implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold
1 of the 'ASM_EXPR'.
1
1 'DECL_EXPR'
1
1 Used to represent a local declaration. The 'DECL_EXPR_DECL' macro
1 can be used to obtain the entity declared. This declaration may be
1 a 'LABEL_DECL', indicating that the label declared is a local
1 label. (As an extension, GCC allows the declaration of labels with
1 scope.) In C, this declaration may be a 'FUNCTION_DECL',
1 indicating the use of the GCC nested function extension. For more
1 information, ⇒Functions.
1
1 'LABEL_EXPR'
1
1 Used to represent a label. The 'LABEL_DECL' declared by this
1 statement can be obtained with the 'LABEL_EXPR_LABEL' macro. The
1 'IDENTIFIER_NODE' giving the name of the label can be obtained from
1 the 'LABEL_DECL' with 'DECL_NAME'.
1
1 'GOTO_EXPR'
1
1 Used to represent a 'goto' statement. The 'GOTO_DESTINATION' will
1 usually be a 'LABEL_DECL'. However, if the "computed goto"
1 extension has been used, the 'GOTO_DESTINATION' will be an
1 arbitrary expression indicating the destination. This expression
1 will always have pointer type.
1
1 'RETURN_EXPR'
1
1 Used to represent a 'return' statement. Operand 0 represents the
1 value to return. It should either be the 'RESULT_DECL' for the
1 containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the
1 function's 'RESULT_DECL'. It will be 'NULL_TREE' if the statement
1 was just
1 return;
1
1 'LOOP_EXPR'
1 These nodes represent "infinite" loops. The 'LOOP_EXPR_BODY'
1 represents the body of the loop. It should be executed forever,
1 unless an 'EXIT_EXPR' is encountered.
1
1 'EXIT_EXPR'
1 These nodes represent conditional exits from the nearest enclosing
1 'LOOP_EXPR'. The single operand is the condition; if it is
1 nonzero, then the loop should be exited. An 'EXIT_EXPR' will only
1 appear within a 'LOOP_EXPR'.
1
1 'SWITCH_STMT'
1
1 Used to represent a 'switch' statement. The 'SWITCH_STMT_COND' is
1 the expression on which the switch is occurring. See the
1 documentation for an 'IF_STMT' for more information on the
1 representation used for the condition. The 'SWITCH_STMT_BODY' is
1 the body of the switch statement. The 'SWITCH_STMT_TYPE' is the
1 original type of switch expression as given in the source, before
1 any compiler conversions.
1
1 'CASE_LABEL_EXPR'
1
1 Use to represent a 'case' label, range of 'case' labels, or a
1 'default' label. If 'CASE_LOW' is 'NULL_TREE', then this is a
1 'default' label. Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then
1 this is an ordinary 'case' label. In this case, 'CASE_LOW' is an
1 expression giving the value of the label. Both 'CASE_LOW' and
1 'CASE_HIGH' are 'INTEGER_CST' nodes. These values will have the
1 same type as the condition expression in the switch statement.
1
1 Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the
1 statement is a range of case labels. Such statements originate
1 with the extension that allows users to write things of the form:
1 case 2 ... 5:
1 The first value will be 'CASE_LOW', while the second will be
1 'CASE_HIGH'.
1
1 'DEBUG_BEGIN_STMT'
1
1 Marks the beginning of a source statement, for purposes of debug
1 information generation.
1